创建三个线程ABC,并按照ABC的顺序执行

线程池的四种的创建:
(1)newCachedThreadPool创建一个可缓存线程池
(2)newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数。
(3)newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任 务执行。
(4)newSingleThreadExecutor 创建一个单线程化的线程池。

        我们需要使用到 单线程化线程池(newSingleThreadExecutor):串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。查看源码不难发现是用Queue队列先进先出的特性来实现。

public class singleThreadExecutor {
    public static void main(String[] args){

        String[] strs = {"A","B","C","D","E","F","G","H","I","J","K"};
        //单线程化的线程池
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        for (String str:
                strs) {
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    Thread.currentThread().setName("线程"+str);
                    System.out.println(Thread.currentThread().getName());
                    try{
                        Thread.sleep(200);
                    }catch (Exception e){
                    }
                }
            });
        }
        /*线程池状态变为SHUTDOWN状态,此时,不能再往线程池中添加新任务,否则会抛出RejectedExecutionException异常。
          线程池不会立刻退出,直到添加到线程池中的任务都已经处理完成
        */
        executorService.shutdown();
    }
}
执行结果:
线程A
线程B
线程C
线程D
线程E
线程F
线程G
线程H
线程I
线程J
线程K

 

 

你可能感兴趣的:(线程)