线程池中任务和线程严格上有什么区别?
比如
Thread t1 = new Thread();
t1.start();
这里我们可以叫t1是一个线程对象。
...
Thread t2 = new Thread();
executorService.execute(t2);
这里t2是提交到线程池的任务。
这个任务是否可以理解为“未运行的线程任务”?
线程池中任务和线程严格上有什么区别?
比如
Thread t1 = new Thread();
t1.start();
这里我们可以叫t1是一个线程对象。
...
Thread t2 = new Thread();
executorService.execute(t2);
这里t2是提交到线程池的任务。
这个任务是否可以理解为“未运行的线程任务”?
8 回答6.8k 阅读
4 回答1k 阅读✓ 已解决
1 回答2.5k 阅读✓ 已解决
4 回答479 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
2 回答651 阅读✓ 已解决
2 回答1.2k 阅读
我觉得很简洁明了,任务就是一个Runnable对象,等着被线程调度执行的。你上面说的
t2
就是提交的一个任务。他是一个Thread
实例,但是在线程池里面还是被当做是一个Runnable
对象。t1
可以说是线程对象,只是它调度的是自己内部的任务。代码位置:
Thread#run()
线程池的源码,你也可以点进去看看.
你传进来的参数Runnable对象就是提交给线程池的任务。
任务传进来之后会根据线程池的策略来决定是创建线程资源去执行还是放入队列等待调度或者其他策略,
具体的任务被执行的代码可以看
ThreadPoolExecutor#runWorker(Worker w)
方法,