9.Java5线程并发库的应用

 1 import java.util.concurrent.ExecutorService;
 2 import java.util.concurrent.Executors;
 3 import java.util.concurrent.TimeUnit;
 4 
 5 /**
 6  * java5线程并发库的应用 
 7  * 线程池工具类 Executors
 8  * 
 9  * @author LiTaiQing
10  *
11  */
12 public class ThreadPoolTest {
13 
14     public static void main(String[] args) {
15         //固定大小的线程池
16         //ExecutorService threadPool = Executors.newFixedThreadPool(3);
17         //缓存线程池
18         //ExecutorService threadPool = Executors.newCachedThreadPool();
19         /**
20          * 单一线程池(如何实现线程死掉后重新启动)
21          *     此线程池的特点正好解决上述问题,如果线程挂掉,此线程池会自动创建一个线程代替挂掉的线程
22          */
23         ExecutorService threadPool = Executors.newSingleThreadExecutor();
24         for (int i = 1; i < 10; i++) {
25             final int task = i;
26             threadPool.execute(new Runnable() {
27                 @Override
28                 public void run() {
29                     for (int j = 0; j < 10; j++) {
30                         try {
31                             Thread.sleep(20);
32                         } catch (InterruptedException e) {
33                             e.printStackTrace();
34                         }
35                         System.out.println(Thread.currentThread().getName()
36                                 + " is looping of " + j
37                                 + " for task of " + task);
38                     }
39                 }
40             });
41         }
42         System.out.println("all of 10 tasks have committed!");
43         //当所有任务结束后关闭线程池
44         //threadPool.shutdown();
45         //不管所有任务是否都已结束,直接关闭线程池
46         //threadPool.shutdownNow();
47         //计时器
48 //        Executors.newScheduledThreadPool(3).schedule(new Runnable(){
49 //            @Override
50 //            public void run() {
51 //                System.out.println("bombing!");
52 //            }
53 //        }, 
54 //        6, //时间
55 //        TimeUnit.SECONDS);//单位
56         
57         /**
58          * 固定频率
59          * 实现6秒以后炸,以后每2秒后爆炸一次
60          */
61         Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable(){
62             @Override
63             public void run() {
64                 System.out.println("bombing!");
65             }
66         }, 
67         6, //时间
68         2, //时间间隔
69         TimeUnit.SECONDS);//单位
70     }
71     
72     
73 }

 

posted @ 2015-07-10 12:07  登高一呼  阅读(214)  评论(0编辑  收藏  举报