java5线程并发库的应用

筅森魡賤 提交于 2020-04-12 09:12:28

一、线程池

    1、线程池的概念与Executors类的应用

            > 创建固定大小的线程池

            > 创建缓存线程池

            > 创建单一线程池(如何实现线程死掉后重启?)

    2、关闭线程池

            > shutdown与shutdownNow的比较
                前者是任务执行完毕即关闭程序,或者表示立即关闭而不会关心任务是否已经完成。

    3、用线程池启动定时器

            > 调用ScheduledExecutorService的schedule方法,返回的ScheduleFuture对象可以取消任务

            > 支持间隔重复任务的定时方式,不直接支持绝对定时方式,需要转换成相对时间方式

二、代码描述

    1、ThreadPoolTest.java 常见几种线程池类型

/** 
* @Title: ThreadPoolTest.java 
* @Package com.lh.threadtest.t8 
* @Description: TODO
* @author Liu 
* @date 2018年1月17日 下午2:17:40 
* @version V1.0 
*/
package com.lh.threadtest.t8;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

/** 
* @ClassName: ThreadPoolTest 
* @Description: java5线程并发库的应用(常见几种线程池类型)
* @author Liu
* @date 2018年1月17日 下午2:17:40 
*  
*/
public class ThreadPoolTest {

	/***
	* @Title: main 
	* @Description: TODO
	* @param @param args
	* @return void
	* @throws 
	*/
	public static void main(String[] args) {
		//创建固定大小的线程池
//		ExecutorService executorService = Executors.newFixedThreadPool(3);
		
		//创建缓存线程池
//		ExecutorService executorService = Executors.newCachedThreadPool();
		
		//创建单一线程池(如何实现线程死掉后重启?)
		ExecutorService executorService = Executors.newSingleThreadExecutor();
	
		
		for(int i = 1; i <= 10; i++){
			final int task = i;
			executorService.execute(new Runnable() {
				
				@Override
				public void run() {
					for(int i = 1; i <= 10; i++){
						try {
							//模拟处理延时
							TimeUnit.MILLISECONDS.sleep(100);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
						System.out.println(Thread.currentThread().getName() + " is looping of: " + i + " for task of " + task);
					}
				}
			});
		}
	
		System.out.println("All of 10 tasks have commited!");
//		executorService.shutdownNow();
		executorService.shutdown();
	}

}

    2、ThreadPoolTest2.java 定时爆炸

/** 
* @Title: ThreadPoolTest.java 
* @Package com.lh.threadtest.t8 
* @Description: TODO
* @author Liu 
* @date 2018年1月17日 下午2:17:40 
* @version V1.0 
*/
package com.lh.threadtest.t8;

import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

/** 
* @ClassName: ThreadPoolTest 
* @Description: java5线程并发库的应用(线程池定时任务)
* 
* 支持间隔重复任务的定时方式,不直接支持绝对定时方式,需要转换成相对时间方式
* date.getTime() - System.currentTimeMillis()
* 
* @author Liu
* @date 2018年1月17日 下午2:17:40 
*  
*/
public class ThreadPoolTest2 {

	/***
	* @Title: main 
	* @Description: TODO
	* @param @param args
	* @return void
	* @throws 
	*/
	public static void main(String[] args) {
		Executors.newScheduledThreadPool(3).schedule(new Runnable() {
			
			@Override
			public void run() {
				System.out.println("bombing!");
			}
		}, 10, TimeUnit.SECONDS);
		
		while(true){
			try {
				TimeUnit.SECONDS.sleep(1);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println(new Date().getSeconds());
		}
	}

}

    3、ThreadPoolTest3.java 连环爆炸

/** 
* @Title: ThreadPoolTest.java 
* @Package com.lh.threadtest.t8 
* @Description: TODO
* @author Liu 
* @date 2018年1月17日 下午2:17:40 
* @version V1.0 
*/
package com.lh.threadtest.t8;

import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

/** 
* @ClassName: ThreadPoolTest 
* @Description: java5线程并发库的应用(定时任务,连环爆炸)
* 
* 支持间隔重复任务的定时方式,不直接支持绝对定时方式,需要转换成相对时间方式:
* date.getTime() - System.currentTimeMillis()
* 
* @author Liu
* @date 2018年1月17日 下午2:17:40 
*  
*/
public class ThreadPoolTest3 {

	/***
	* @Title: main 
	* @Description: java5线程并发库的应用
	* @param @param args
	* @return void
	* @throws 
	*/
	public static void main(String[] args) {
		Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable() {
			
			@Override
			public void run() {
				System.out.println("bombing!");
			}
		}, 5, 3, TimeUnit.SECONDS);
		
		while(true){
			try {
				TimeUnit.SECONDS.sleep(1);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println(new Date().getSeconds());
		}
	}

}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!