高级并发学习之 各种线程池的使用
来源:互联网 发布:php将文件夹压缩成zip 编辑:程序博客网 时间:2024/06/07 00:53
import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;public class ThreadPoolTest {public static void main(String[] args) throws InterruptedException, ParseException {//创建固定大小的线程池,通过共享无界队列的方式来运行这些线程新加的任务超过了线程池的大小 则存放在工作队列中//ExecutorService threadPool=Executors.newFixedThreadPool(3);//创建缓存线程池 如果当前线程没有可用的,则创建一个新的线程并添加到池中;长时间的空闲线程使用每隔60s清除一次//ExecutorService threadPool=Executors.newCachedThreadPool();//创建单一线程(可以实现线程死掉后重新启动,实际是找到一个替补)ExecutorService threadPool=Executors.newSingleThreadExecutor();for(int j=0;j<10;j++){final int task=j;threadPool.execute(new Runnable(){@Overridepublic void run() {for(int i=0;i<10;i++){try {Thread.sleep(20);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(Thread.currentThread().getName()+"正在执行第 "+task+"个任务的第"+i+"次循环");}}});}threadPool.shutdown();while(!threadPool.awaitTermination(1, TimeUnit.SECONDS)){}System.out.println("所有任务都结束");//创建定时任务线程池Executors.newScheduledThreadPool(3).schedule(new Runnable(){@Overridepublic void run() {//需要进行处理的任务System.out.println("bombing");}}, 5, TimeUnit.SECONDS);//创建含有定时器的线程池任务Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable(){@Overridepublic void run() {System.out.println("爆炸....");}}, 6, 2, TimeUnit.SECONDS);//延迟6s后每隔2s爆炸一次/***********************如果要求在特定的某一日期的某一时刻执行,则应该使用以下方法***************************/SimpleDateFormat CUSTOM_DAYTIME_FORMATOR = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date=CUSTOM_DAYTIME_FORMATOR.parse("2016-01-11 15:37:00");Executors.newScheduledThreadPool(3).schedule(new Runnable(){@Overridepublic void run() {//需要进行处理的任务System.out.println("定时bombing");}}, 5, TimeUnit.SECONDS); System.out.println((date.getTime()-System.currentTimeMillis())/1000/60);}}
0 0
- 高级并发学习之 各种线程池的使用
- Java并发之线程池的学习
- 高级并发编程学习之使用Exchanger
- Java多线程与并发学习之(三):线程的各种状态
- Java多线程与并发库高级应用之线程池
- Java多线程与并发库高级应用之线程池
- 并发编程高级部分(Executor框架/线程池的使用)
- 多线程并发库高级应用 之 java5中的线程并发库--线程池、Callable&Future
- 多线程并发库高级应用 之 java5中的线程并发库--线程池、Callable&Future
- java多线程并发库高级应用 之 java5中的线程并发库--线程池、Callable&Future
- 【Java并发学习】之线程的创建
- 【Java并发学习】之线程的同步
- Java 并发编程之线程池的使用
- Java 并发编程之线程池的使用 (二)
- Java 并发编程之线程池的使用 (三)
- Java 并发编程之线程池的使用(一)
- Java 并发编程之线程池的使用 (二)
- Java 并发编程之线程池的使用 (三)
- IE “浏览器模式”和“文档模式”的区别
- 浅谈 Linux 系统中的 SNMP Trap
- 删除不存在的远程分支
- 队列定义
- Unity调用Android录音
- 高级并发学习之 各种线程池的使用
- 使用C#代码为MongoDB添加2D索引
- Android--添加子视图(addView和setView)
- android图片处理方法
- linux系统最基本开发环境的搭建
- 2012年工作总结
- JavaScript-内存泄漏问题
- Android异常之 unable to write jarlist cache file
- iOS性能优化:Instruments使用实战