java线程池(有返回值和无返回值)

版权声明:未经博主同意,禁止转载,联系方式qq2928013321 https://blog.csdn.net/weixin_42130471/article/details/82846729

无返回值:

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);
	}

}


猜你喜欢

转载自blog.csdn.net/weixin_42130471/article/details/82846729
今日推荐