class loops//不知道为什么,停不下来
{
static class LOOP implements Callable<Integer>
{
int c;
LOOP(int c)
{
this.c=c;
}
int n=0;
public Integer call()
{
for(int i=0;i<100000;i++)
n=i;
return n;
}
}
public static void main(String[] args) throws Exception
{
ExecutorService exec=Executors.newCachedThreadPool();
List<Future<Integer>> fc=new ArrayList<Future<Integer>>();
for(int i=0;i<10;i++)
{
fc.add(exec.submit(new LOOP(i)));
}
for(Future<Integer > gc:fc)
{
System.out.println(gc.get());
}
}
}
运行程序后,停不下来
exec 线程池是需要关闭的,如果不关闭,即使添加的线程都执行完,且会有一个线程一直等待状态,自然就不会关闭,需要手动关闭exec.shutdown();
32行加入
exec.shutdown();
因此newCachedThreadPool()创建的临时线程存活时间是60S,所以要等60S临时线程销毁了才会暂停,如果想执行完直接暂停,
一个方案是在最后使用完后调用shutdown()停止线程池
二是创建一个核心线程为0,临时线程存活时间为0的线程池,比如new ThreadPoolExecutor(0, Integer.MAX_VALUE, 0, TimeUnit.SECONDS, new LinkedBlockingQueue<>())。
给你几个思路
1.不要一下启动10个线程,先启动2个看看情况
2.不要一下循环100000次,先循环100次看看情况
3.过程里增加一些输出,不要要么就执行完毕,要么就完全没有响应
这样你才能知道到底是你线程之间死锁了,还是cpu能力不行,也许你多等半小时就执行完了
学了前面忘了后面,往前翻了几页,正如各位所说