Java的线程是怎么复用的?

线程Thread启动执行完代码之后不就结束了,线程池是怎么复用线程的呢?

javathreadthread pool
1
198
小课
小课2022-05-26 15:38
1 个回答

我们传入线程池中Runnable或者Callable并不是直接作为参数传入到Thread的构造方法中,而是先缓存到队列中。传入线程池中的Runnable,它的run方法实现大致如下。

1public void run() {
2    try {
3        Runnable task = firstTask;
4        firstTask = null;
5        while (task != null || (task = getTask()) != null) {
6            runTask(task);
7            task = null; // unnecessary but can help GC
8        }
9    } finally {
10        workerDone(this);
11    }
12}

它会循环从缓存队列中去获取我们提交到线程池的Runnable,然在runTask方法调用task.run(),这样我们提交的Runnable就执行完成了,然后继续用这个线程执行下一个Runnable,这样就达到了线程复用的效果。

1
小课
小课2022-05-26 15:55
你的回答

内容