【问题标题】:JAVA: Possible to add a runnable thread into a queue?JAVA:可以将可运行线程添加到队列中吗?
【发布时间】:2011-07-11 07:47:10
【问题描述】:

我最近开始使用线程,我正在尝试在 Android 中完成 Looper 类的 Java 实现。基本上,我正在制作一个 Java 类,它将线程放入队列中,然后由 Looper 类执行。我已经完成了大部分代码,但在任务排队方面存在问题。

在 Looper 类中,我声明了队列和我的入队方法:

List<Runnable> queue;   

public synchronized void enqueue(Runnable runnable) {
    queue.add(runnable);
    notify(); // signal a waiting thread
}

然后我创建了另一个名为 TaskManager 的类来将任务添加到队列中。我打电话时收到错误:

loop.enqueue(new Task());

Task() 实现了 runnable 并且只是在它的 run() 方法中将两个整数相加......这只是一个测试。

我收到的错误是:

Exception in thread "Thread-0" java.lang.NullPointerException
at Looper.enqueue(Looper.java:20) (this is the queue.add(runnable))
at TaskMaker.run(TaskMaker.java:16) (this is the loop.enqueue(new Task())

我显然做错了什么,没有正确执行……我应该怎么做?我排队任务的方式正确吗?感谢您的帮助,非常感谢!

【问题讨论】:

  • 所有列表的队列都很差(包括 LinkedList)
  • 由于您仅在队列上同步,因此请使用已同步的队列,如 LinkedBlockingQueue。

标签: java multithreading queue priority-queue runnable


【解决方案1】:

您是否正在初始化队列变量?喜欢:

List<Runnable> queue = new ArrayList<Runnable>();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 2021-04-04
    • 2012-03-16
    • 2013-06-30
    相关资源
    最近更新 更多