【练习】第二十一章 并发


练习6:创建一个任务,它将睡眠1到10s之间的随机数量的时间,然后显示它的睡眠时间并退出。创建并运行一定数量的这种任务。

 1 import java.util.*;
 2 import java.util.concurrent.*;
 3 class RandomSleepThread implements Runnable {
 4     public void run() {
 5         try {
 6             Random rand = new Random();
 7             long num = rand.nextInt(10) + 1;
 8             System.out.println(Thread.currentThread().getName() + "睡眠时间:" + num);
 9             TimeUnit.SECONDS.sleep(num);
10         } catch (InterruptedException e) {
11             e.printStackTrace();
12         }
13     }
14 }
15 public class Demo6 {
16 
17     public static void main(String[] args) {
18         ExecutorService exec = Executors.newSingleThreadExecutor();
19         for (int i = 0; i < 10; i++) {
20             exec.execute(new RandomSleepThread());
21         }
22         exec.shutdown();
23     }
24 }
运行结果:
  pool-1-thread-1睡眠时间:9   pool-1-thread-1睡眠时间:7   pool-1-thread-1睡眠时间:9   pool-1-thread-1睡眠时间:2   pool-1-thread-1睡眠时间:9   pool-1-thread-1睡眠时间:1   pool-1-thread-1睡眠时间:2   pool-1-thread-1睡眠时间:10   pool-1-thread-1睡眠时间:7   pool-1-thread-1睡眠时间:2

总结:  

  用SingleThreadExecutor来运行,保证在任意时刻在任何线程中都只有唯一的任务在运行,每个任务都在完成随机的睡眠时间后结束,接着进行下一个任务。