java 多线程任务停不下来


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能力不行,也许你多等半小时就执行完了

学了前面忘了后面,往前翻了几页,正如各位所说