【发布时间】:2015-05-27 12:16:35
【问题描述】:
我有一个线程池执行器
private ExecutorService exec=Executors.newCachedThreadPool();
我有一堂课
class MyCallable implements Callable<String>{
private ReentrantLock lock=new ReentrantLock();
private Condition cond=lock.newCondition();
public String call(){
System.out.println("TEST!!);
try{
lock.lock();
cond.await();
}finally{
lock.unlock();
}
}
}
我愿意:
for(int i=0;i<10000;i++){
exec.submit(new MyCallable());
}
我想拥有 10000 个等待调用的线程,但我只能看到一个 TEST!在我的日志中,所以它只提交一次我的任务,为什么它会冻结???我的可调用对象在每个对象实例中都有自己的锁,如何有 1000 个等待线程?
【问题讨论】:
-
在
for(...)循环结束后,您还要等待多长时间才能终止程序? -
谢谢,但我不能使用固定线程池,我不知道可调用的数量,10k 只是一个例子@Hanno,我只有这个循环,我什至不使用未来。获取()
-
会不会是你的程序在许多新线程执行之前就终止了?如果你只是在循环之后
Thread.sleep(1000)会发生什么? -
无论如何,您都不需要知道可调用对象的数量。 FixedThreadPool 一次只执行 n 个线程。
标签: java multithreading executorservice