关于线程的一个疑问

关于线程的一个疑问

public class ShutDown {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        for (int i = 0; i < 1000; i++) {
            executorService.execute(new ShutDownTask());
        }
        try {
           Thread.sleep(1500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
​        List<Runnable> runnableList=executorService.shutdownNow();
        System.out.println(runnableList.size());

    }
}
class ShutDownTask implements Runnable {
    @Override
    public void run() {
        try {
            Thread.sleep(500);
            System.out.println(Thread.currentThread().getName());
        } catch (InterruptedException e) {
            System.out.println("被中断了:"+Thread.currentThread().getName());
            e.printStackTrace();
        }

    }
}

这里for循环的作用是把任务放到任务队列中,由线程池去执行1000个任务,主线程继续往下执行不受正在执行的1000个任务的干扰对吗?主线程和线程池中的任务是同步执行还是交替执行的?我有点不理解

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,如下这段代码时循环生成30个线程并启动,是生成一个线程启动后再进行下一个。

http://img1.sycdn.imooc.com//climg/600cda7c0993668c02890182.jpg

祝学习愉快~

  • mahsiaoko 提问者 #1

    这里的启动是指的字面的启动?没有执行完这个线程?

    2021-01-24 10:41:17
  • 好帮手慕阿满 回复 提问者 mahsiaoko #2

    同学你好,线程已经启动,不一定执行完成。

    祝学习愉快~

    2021-01-24 15:36:54
好帮手慕小尤 2021-01-23 14:50:45

同学你好,1、是的,同学理解是正确的,

2、是同步执行的,因线程继续往下执行,不受正在执行的1000个任务的干扰,所以主线程和线程池中的任务是同步执行的,不是交替执行的。

祝学习愉快!

  • 提问者 mahsiaoko #1
    for (int i = 0; i < 30; i++) {
    new Thread(new Runnable() {
    @Override
    public void run() {

    }
    }).start();
    }

    老师,那这样的三十个线程是依次执行吗?执行完一个才会进行下一个循环?

    2021-01-23 22:20:46
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师