1. 程式人生 > >常見執行緒池和啟動定時器執行緒池-筆記整理7

常見執行緒池和啟動定時器執行緒池-筆記整理7

常見執行緒池和啟動定時器執行緒池

1.執行緒池的概念:執行緒池是一種多執行緒處理形式,處理過程中將任務新增到佇列,如果執行緒池中有空閒的執行緒,則由該執行緒去完成這些任務。

2.Excecutors類的應用

  (1)建立固定大小的執行緒池Executors.newFixedThreadPool(3); 

  (2)建立快取執行緒池Executors.newCachedThreadPool(3)

當任務扔進執行緒池中如果當前建立的執行緒不夠來處理任務的話,就自動新增跟任務數量相等的執行緒。

  (3)建立單一執行緒池:Executors.newSingleThreadExecutor();

     跟建立單一執行緒並沒有什麼區別,但是它有一個好處,就是當這個執行緒死了以後,就會自動再建立一個替補執行緒。

3.執行緒池結束執行緒的方法:shutdown();shutdownNow

   shutdown():

   shutdownNow():

4.用執行緒池啟動定時器

  (1)呼叫ScheduleExecutorServiceschedule方法,返回的ScheduleFuture物件可以取消任務。

  (2)支援間隔重複任務的定時方式,不直接支援絕對定時方式,需要轉換成相對時間方式。

注意:scheduleAtFixedRate()這個方法裡並沒有傳入Date這個引數的方法。

例項1:對三種常見執行緒池使用示例

public class ThreadPoolTest {
	public static void main(String[] args) {
		
		// TODO Auto-generated method stub
	  //ExecutorService threadpool= Executors.newFixedThreadPool(3);
		ExecutorService threadpool= Executors.newCachedThreadPool();
	  
		for(int i=1;i<=10;i++){
			  final int task = i;
			  threadpool.execute(
				   new Runnable(){
					   public void run(){
						    for(int j=1;j<=10;j++){
						    	try {
									Thread.sleep(100);
								} catch (InterruptedException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}
						    	System.out.println(Thread.currentThread().getName() + " is looping of " + j + " for  task of " + task);
						    }
					   }
				   }
				  );
		}
	}
}
例項2:對執行緒池指定的任務設定,延遲時間,和指定時間間隔
		Executors.newScheduledThreadPool(3).scheduleAtFixedRate((new Runnable() {
			@Override
			public void run() {
				System.out.println("bombing");
			}
		}), 10, 2,TimeUnit.SECONDS);