1. 程式人生 > >線程和線程池的使用

線程和線程池的使用

ren 參考 oid 工作 adp pre 定義 ++ edt

參考:http://www.cnblogs.com/dolphin0520/p/3932921.html

1、線程:循環新建10個線程

註意:final定義的變量才能在run()方法裏使用

package com.test;

public class TestThread {

	public static void main(String[] args) {
		for(int i =0; i <9; i++){
			//final變量才能傳到run()方法裏
			final int task = i;	
			new Thread(new Runnable(){	
				@Override
				public synchronized void run() {
					System.out.println("task:" + task);
				}
				
			}).start();
		}
		
	}
	
}

2、線程池

不提倡直接使用ThreadPoolExecutor,Java通過Executors提供四種線程池,分別為:


(1)newCachedThreadPool

  創建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無可回收,則新建線程。
(2)newFixedThreadPool

  創建一個定長線程池,可控制線程最大並發數,超出的線程會在隊列中等待。
(3)newScheduledThreadPool

  創建一個定長線程池,支持定時及周期性任務執行。
(4)newSingleThreadExecutor

  創建一個單線程化的線程池,它只會用唯一的工作線程來執行任務,保證所有任務按照指定順序(FIFO, LIFO, 優先級)執行。

如下是newFixedThreadPool的使用實例:

package com.test;

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

public class TestExcutor {

	public static void main(String[] args) {
		//線程池接口:ExecutorService
		ExecutorService fixThreadPool = Executors.newFixedThreadPool(5);
		for(int i=1; i<=5; i++){
			final int task =i;
			fixThreadPool.execute(new Runnable(){

				@Override
				public synchronized void run() {
					for(int j=1; j<=3;j++){
						System.out.println(Thread.currentThread().getName() + "  " +"task:" + task + "   times:" +j);
					}
				}
				
			});
		}
		fixThreadPool.shutdown();
		
	}
	
}

  

線程和線程池的使用