Java并发(4)----fixedthreadPool使用有限的线程执行所提交的任务

1.

目前使用线程池对象建立了两个线程,然后,放在线程池中,其中一个线程已经完成,另一个线程还在激活状态,进行执行:

exec的对象始终调用的是当前的线程,进行调用,其中线程是通过引用存放在线程池中的

显示结果如下所示:

"C:\Program Files\Java\jdk1.8.0_171\bin\java.exe" "-javaagent:D:\IDEA_JAVA\IntelliJ IDEA 2018.2.4\lib\idea_rt.jar=57309:D:\IDEA_JAVA\IntelliJ IDEA 2018.2.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_171\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\rt.jar;C:\Users\wu\Desktop\work\11\vue\并发\out\production\并发" CachedThreadPool
#0(9)
#1(9)
#0(8)
#2(9)
#3(9)
#4(9)
#1(8)
#0(7)
#2(8)
#3(8)
#4(8)
#1(7)
#0(6)
#3(7)
#2(7)
#4(7)
#1(6)
#0(5)
#3(6)
#2(6)
#4(6)
#1(5)
#0(4)
#3(5)
#2(5)
#4(5)
#1(4)
#0(3)
#3(4)
#2(4)
#1(3)
#4(4)
#0(2)
#3(3)
#2(3)
#1(2)
#4(3)
#0(1)
#3(2)
#2(2)
#1(1)
#4(2)
#0(liftOff!)
#3(1)
#2(1)
#1(liftOff!)
#4(1)
#3(liftOff!)
#2(liftOff!)
#4(liftOff!)

Process finished with exit code 0

显示结果如上所示:会优先去调度使用占用资源比较多的线程,然后再去调用线程执行比较少的资源:

结果显示如下所示:


 

详细实现验证代码,实现结果如下所示:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class CachedThreadPool {
    public static void main(String[] args){
        ExecutorService exec= Executors.newFixedThreadPool(3);//使用有限线程去调度,使用优先级高,耗资源的先进行调用。
        for (int i=0;i<5;i++){
            exec.execute(new LiftOff());
        }
        exec.shutdown();
    }
}


public class LiftOff implements Runnable{
    protected int CountDown =10;//3
    private static int taskcount=0;//1
    private final int id=taskcount++;//4
    public LiftOff(){}//2
    public LiftOff(int CountDown){
        this.CountDown=CountDown;
    }
    public String status(){  //判断条件以及验证状态
        return "#"+id+"("+(CountDown>0?CountDown:"liftOff!")+")";
    }
    public void run(){  //执行
        while (CountDown-->0){//将CountDown进行自减操作:
            System.out.println(status());
            Thread.yield();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_35561207/article/details/84555470