【发布时间】: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