線程和線程池的使用
阿新 • • 發佈:2017-10-16
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(); } }
線程和線程池的使用