管理线程的线程池

来源:互联网 发布:程序员猝死 知乎 编辑:程序博客网 时间:2024/05/16 05:38

我们实现线程的一般方式是一个类实现Runnable接口,再new Thread(new Runnable).start();

自从JDK5之后,sun公司在java.util.concurrent包下提供了一些方法来管理线程:

具体看代码里面有注释,一目了然:

import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class DemoLiftOff implements Runnable {protected int countDown=10;private static int taskCount=0;private final int id=taskCount++;public DemoLiftOff(){}public DemoLiftOff(int countDown){this.countDown=countDown;}public String status(){return "#"+id+"("+(countDown>0?countDown:"Liftoff!")+")";}@Overridepublic void run() {while(countDown-->0){System.out.println(status());Thread.yield();try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}    public static void main(String[] args) {    //普通的通过Thread启动线程//    for(int i=0;i<5;i++){//    new Thread(new DemoLiftOff()).start();//        System.out.println("waitting for thread over~!!");//    }    //用线程管理池 ExecutorDervice Executors newCachedThreadPool    //创建的线程个数与所需的相同,回收旧线程的时候停止创建新线程(首选)//    ExecutorService exec=Executors.newCachedThreadPool();//    for(int i=0;i<5;i++){//    exec.execute(new DemoLiftOff());//    }//    exec.shutdown();        //newFixedThreadPool    //创建的线程个数可控,优先选择代价高昂的线程,执行完毕在执行别的//    ExecutorService exec=Executors.newFixedThreadPool(3);//    for(int i=0;i<5;i++){//    exec.execute(new DemoLiftOff());//    }//    exec.shutdown();        //SingleThreadExecutor    //创建无论多少个线程会根据创建的次序排序执行完一个执行下一个    ExecutorService exec=Executors.newSingleThreadExecutor();    for(int i=0;i<5;i++){    exec.execute(new DemoLiftOff());    }    exec.shutdown();}}


 

 

原创粉丝点击