Java中线程池的使用

1.首先实现Callable接口,实现Callable接口中的call()方法(这里命名为MyCallable);

2.在main方法中声明ExecutorService类型的新变量(这里命名为pool),调用Executors类中的静态方法newSingleThreadExecutor()或newFixedThreadPool(int nThreads);来创建一个或多个线程;

3.创建MyCallable对象;

4.通过Future<T>类的对象(这里命名为f)调用pool中的submit()方法来接收线程计算结果;

5.通过f中的get()方法得到计算结果。

示例:

MyCallable.java

import java.util.concurrent.Callable;

public class MyCallable implements Callable<Integer> {

	private Integer n;
	
	public MyCallable(Integer n) {
		// TODO 自动生成的构造函数存根
		this.n = n;
	}

	@Override
	public Integer call() throws Exception {
		Integer sum = 0;
		for(int i = 1; i <= n; i++) {
			sum += i;
		}
		return sum;
	}

}

poolDemo.java

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

public class poolDemo {

	public static void main(String[] args) {
		ExecutorService pool = Executors.newFixedThreadPool(2);
		
		MyCallable mc1 = new MyCallable(100);
		MyCallable mc2 = new MyCallable(200);
		
		Future<Integer> f1 = pool.submit(mc1);
		Future<Integer> f2 = pool.submit(mc2);
		
		try {
			System.out.println(f1.get());
		} catch (InterruptedException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (ExecutionException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		try {
			System.out.println(f2.get());
		} catch (InterruptedException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (ExecutionException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		pool.shutdown();
	}
}

输出结果:

5050
20100

猜你喜欢

转载自blog.csdn.net/g28_gwf/article/details/80357700