1. 程式人生 > >java執行緒池(有返回值和無返回值)

java執行緒池(有返回值和無返回值)

無返回值:

package ThreadPool2;

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

public class test {

	public static void main(String[] args) {
		//1、建立執行緒池
		//建立一個執行緒池
//		ExecutorService pool=Executors.newSingleThreadExecutor();
		//建立固定個數的執行緒池
		ExecutorService pool=Executors.newFixedThreadPool(10);
		//建立不固定個數的執行緒池
//		ExecutorService pool=Executors.newCachedThreadPool();
		
		//2、使用執行緒池(完成大量沒有返回值的Runnable命令)
		
		for(int i=0;i<20;i++) {
			int n=i;//1.7版本要final修飾,1.8不需要
			Runnable r=new Runnable() {
				public void run() {
					System.out.println("執行緒建立"+n);
					try {
						Thread.currentThread().sleep(3000);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					System.out.println("執行緒結束"+n);
				}
			};
			pool.execute(r);
		}
		
		//3、結束執行緒池
		pool.shutdown();

	}

}

有返回值:

package ThreadPool2;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class test2 {

	public static void main(String[] args) throws InterruptedException, ExecutionException {
		//1、建立執行緒池
		//建立一個執行緒池
//		ExecutorService pool=Executors.newSingleThreadExecutor();
		//建立固定個數的執行緒池
//		ExecutorService pool=Executors.newFixedThreadPool(10);
		//建立不固定個數的執行緒池
		ExecutorService pool=Executors.newCachedThreadPool();
		
		//2、使用執行緒池(完成大量沒有返回值的Runnable命令)
		
		//需要60秒
//		for(int i=0;i<20;i++) {
//			Callable<Integer> task=new myCallable();
//			Future<Integer> future=pool.submit(task);
//			int result=future.get();
//			System.out.println(result);
//		}
		
		//需要3秒
		List<Future> list=new ArrayList<>();
		for(int i=0;i<20;i++) {
			Callable<Integer> task=new myCallable();
			Future<Integer> future=pool.submit(task);
			list.add(future);
		}
		for(Future f:list) {
			System.out.println(f.get());
		}
		//3、結束執行緒池
		pool.shutdown();

	}

}
class myCallable implements Callable<Integer>{
	@Override
	public Integer call() throws Exception {
		// TODO Auto-generated method stub
		System.out.println("執行緒開始");
		Thread.currentThread().sleep(3000);
		System.out.println("執行緒結束");
		return new Random().nextInt(10);
	}

}