Fork me on GitHub

14. 线程调度

package com.gf.demo13;

import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

/**
 * 一、线程池 : 提供了一个线程队列,队列中保存着所有等待状态的线程。避免了创建与销毁额外开销,提高了响应的速度。
 * 
 * 二、线程池的体系机构 : 
 *	java.util.concurrent.Executor : 负责线程的使用与调度的根接口
 *		|--ExecutorService 子接口 : 线程池的主要接口
 *			|--ThreadPoolExecutor 线程池的实现类
 *			|--ScheduledExecutorService 子接口 : 负责线程的调度
 *				|--ScheduledThreadPoolExecutor : 继承ThreadPoolExecutor ,实现ScheduledExecotorService
 *
 * 三、工具类: Executors
 * ExecutorSercice newFixedThreadPool() : 创建固定大小的线程池
 * ExecutorSercice newCachedThreadPool() : 缓存线程池,线程池的数量不固定,可以根据需求自动的更改数量。
 * ExecutorSercice newSingleThreadExecutor() : 创建单个线程池,线程池中只有一个线程
 * 
 * 
 * ScheduledExecutorService newScheduledThreadPool() : 创建固定大小的线程,可以延迟或定时执行任务。
 *
 */
public class TestScheduledThreadPool {
	
	public static void main(String[] args) throws Exception {
		
		ScheduledExecutorService pool = Executors.newScheduledThreadPool(5);
		
		for (int i = 0; i < 5; i++) {
			Future<Integer> result = pool.schedule(new Callable<Integer>() {
				
				@Override
				public Integer call() throws Exception {
					int num = new Random().nextInt(100);//生成随机数
					System.out.println(Thread.currentThread().getName() + " : " + num );
					return num;
				}
				
			}, 1, TimeUnit.SECONDS); //1秒延迟
			
			System.out.println(result.get());
		}
		
		pool.shutdown();
		
	}

}

 

关注我的公众号,精彩内容不能错过

posted @ 2017-12-14 15:24  程序员果果  阅读(118)  评论(0编辑  收藏  举报