多线程(三)Future和Callable

package a;

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 E {
public static void main(String[] args) {
	ExecutorService pool = Executors.newSingleThreadExecutor();
	Future<String> future = pool.submit(new Callable<String>() {
		public String call() throws Exception {
			Thread.sleep(1000);
			return "hello";
		}
	});
	
	System.out.println("等待结果,可做其他事");
	try {
		System.out.println("拿到结果:"+future.get());
	} catch (InterruptedException e) {
		e.printStackTrace();
	} catch (ExecutionException e) {
		e.printStackTrace();
	}
	
}
}

package a;

import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class F {
	public static void main(String[] args) {
		ExecutorService threadPool = Executors.newFixedThreadPool(10);
		CompletionService<Integer> completionService=new ExecutorCompletionService<Integer>(threadPool);
		for(int i=0;i<10;i++) {
			final int seq=i;
			completionService.submit(new Callable<Integer>() {
				public Integer call() throws Exception {
					Thread.sleep(new Random().nextInt(3000));
					System.out.println(Thread.currentThread().getName()+"---"+seq);
					return seq;
				}
			});
		}
		
		for(int i=0;i<10;i++) {
			try {
				System.out.println(completionService.take().get());
			} catch (InterruptedException e) {
				e.printStackTrace();
			} catch (ExecutionException e) {
				e.printStackTrace();
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/q975583865/article/details/84951656