java5線程併發庫的應用

1、線程池

    一、線程池的概念與Executors類的應用

            > 建立固定大小的線程池java

            > 建立緩存線程池緩存

            > 建立單一線程池(如何實現線程死掉後重啓?)併發

    二、關閉線程池

            > shutdown與shutdownNow的比較
                前者是任務執行完畢即關閉程序,或者表示當即關閉而不會關心任務是否已經完成。ide

    三、用線程池啓動定時器

            > 調用ScheduledExecutorService的schedule方法,返回的ScheduleFuture對象能夠取消任務oop

            > 支持間隔重複任務的定時方式,不直接支持絕對定時方式,須要轉換成相對時間方式spa

2、代碼描述

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

}

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

}

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

}
相關文章
相關標籤/搜索