打字猴:1.700450629e+09
1700450629
1700450630 return ftask;
1700450631
1700450632 }
1700450633
1700450634 此处的代码关键是execute方法,它实现了三个职责。
1700450635
1700450636 创建足够多的工作线程数,数量不超过最大线程数量,并保持线程处于运行或等待状态。
1700450637
1700450638 把等待处理的任务放到任务队列中。
1700450639
1700450640 从任务队列中取出任务来执行。
1700450641
1700450642 其中此处的关键是工作线程的创建,它也是通过new Thread方式创建的一个线程,只是它创建的并不是我们的任务线程(虽然我们的任务实现了Runnable接口,但它只是起一个标志性的作用),而是经过包装的Worker线程,代码如下:
1700450643
1700450644 private final class Worker implements Runnable{
1700450645
1700450646 //运行一次任务
1700450647
1700450648 private void runTask(Runnable task){
1700450649
1700450650 //这里的task才是我们自定义实现Runnable接口的任务
1700450651
1700450652 task.run();
1700450653
1700450654 }
1700450655
1700450656 //工作线程也是线程,必须实现的run方法
1700450657
1700450658 public void run(){
1700450659
1700450660 while(task!=null||(task=getTask())!=null){
1700450661
1700450662 runTask(task);
1700450663
1700450664 task=null;
1700450665
1700450666 }
1700450667
1700450668 }
1700450669
1700450670 //从任务队列中获得任务
1700450671
1700450672 Runnable getTask(){
1700450673
1700450674 for(;){
1700450675
1700450676 return workQueue.take();
1700450677
1700450678 }
[ 上一页 ]  [ :1.700450629e+09 ]  [ 下一页 ]