由于未初始化的外部成员变量,下面的代码抛出空指针异常。它在 run 方法中为可运行变量抛出 NPE。我已经在 newFixedThreadPool 方法中初始化了 ConcurrentLinkedQueue 类型的本地变量,并调用了参数化构造函数来初始化可运行成员变量。
顺便说一句,当我直接初始化可运行变量而不创建任何局部变量时,代码运行成功。
任何人都可以解释这个
import java.util.concurrent.ConcurrentLinkedQueue;
public class MyExecuterService {
private ConcurrentLinkedQueue<Runnable> runnables;
//private AtomicBoolean execute=AtomicBoolean.true;
private PoolWorkerThread poolWorkerThreads[];
public MyExecuterService()
{}
public MyExecuterService(ConcurrentLinkedQueue<Runnable> runnables,PoolWorkerThread poolWorkerThreads1[])
{
this.runnables=runnables;
poolWorkerThreads=poolWorkerThreads1;
}
private class PoolWorkerThread extends Thread{
@Override
public void run() {
while(true) {
System.out.println(runnables.size()+"runnable"+runnables);
synchronized (runnables) {
if(runnables.size()==0)
{
try {
runnables.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
else
{
Runnable task=runnables.poll();
task.run();
//notify();
}
}
}
}
}
public MyExecuterService newFixedThreadPool(int i)
{
ConcurrentLinkedQueue<Runnable> runnableQueue= new ConcurrentLinkedQueue<Runnable>();
PoolWorkerThread [] threads= new PoolWorkerThread[i];
for (int j = 0; j < i; j++) {
threads[j]= new PoolWorkerThread();
threads[j].start();
}
return new MyExecuterService(runnableQueue, threads);
}
狐的传说
相关分类