博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java5线程并发库的应用
阅读量:6241 次
发布时间:2019-06-22

本文共 3806 字,大约阅读时间需要 12 分钟。

hot3.png

一、线程池

    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());		}	}}

 

转载于:https://my.oschina.net/Howard2016/blog/1608427

你可能感兴趣的文章
jquery $().each,$.each的区别
查看>>
sql server 2000/2005 游标的使用操作(转)
查看>>
Tomcat 部署 Web 通过 ip 直接访问项目
查看>>
Cache Fusion
查看>>
bzoj2502
查看>>
Xcode 控制台打印Unicode字符串转换为中文
查看>>
Codeforces 831C--Jury Marks (思维)
查看>>
oracle内存结构+系统全局区+程序全局区(pga)+排序区+大型池+java池
查看>>
成长7 - lambda,filter,map的运用
查看>>
New Concept English Two 18 46
查看>>
Qt 删除目录
查看>>
Git 移除某些文件
查看>>
poj2940
查看>>
django做form表单的数据验证
查看>>
【OpenFOAM】——OpenFOAM入门算例学习
查看>>
STL UVA 11991 Easy Problem from Rujia Liu?
查看>>
模拟 URAL 1149 Sinus Dances
查看>>
Oracle 11G 数据库迁移【expdp/impdp】
查看>>
17.EXTJs 中icon 与iconCls的区别及用法!
查看>>
3.mybatis实战教程(mybatis in action)之三:实现数据的增删改查
查看>>