1. 程式人生 > >Java多執行緒2.8.執行緒池2

Java多執行緒2.8.執行緒池2

執行緒池

1、實現Callable介面來實現執行緒池

  • Callable:是帶泛型的介面。
  • 這裡指定的泛型其實是call()方法的返回值型別。

(1)建立實現Callable類的執行緒類

package cn.itcast_09;
import java.util.concurrent.Callable;

//Callable:是帶泛型的介面。
//這裡指定的泛型其實是call()方法的返回值型別。
public class MyCallable implements Callable {
	@Override
	public Object call() throws Exception {
		for (int x = 0; x < 100; x++) {
			System.out.println(Thread.currentThread().getName() + ":" + x);
		}
		return null;
	}

}

(2)測試執行緒類

package cn.itcast_09;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class CallableDemo {
	public static void main(String[] args) {
		//建立執行緒池物件
		ExecutorService pool = Executors.newFixedThreadPool(2);
		
		//可以執行Runnable物件或者Callable物件代表的執行緒
		pool.submit(new MyCallable());
		pool.submit(new MyCallable());
		
		//結束
		pool.shutdown();
	}
}

2、 多執行緒實現的方式3

  • 方式1:繼承Thread類
  • 方式2:實現Runnable介面
  • 方式3:實現Callable介面

/* * 多執行緒實現的方式3:  *      A:建立一個執行緒池物件,控制要建立幾個執行緒物件。  *             public static ExecutorService newFixedThreadPool(int nThreads)  *         B:這種執行緒池的執行緒可以執行:  *             可以執行Runnable物件或者Callable物件代表的執行緒  *             做一個類實現Runnable介面。做一個類實現Callable介面。  *         C:呼叫如下方法

即可:  *             Future<?> submit(Runnable task)  *            <T> Future<T> submit(Callable<T> task)  *        D:我就要結束,可以嗎?  *            可以。pool.shutdown();  */