Callable和Future_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Callable和Future

Callable和Future

 2017/9/1 16:08:49  zw7534313  程序员俱乐部  我要评论(0)
  • 摘要:Callable和FutureCallable和Future,它俩很有意思的,一个产生结果,一个拿到结果。Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务的返回值,publicclassTestextendsObject
  • 标签:all

??

?Callable和Future

Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果。?

Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务的返回值,

public class Test extends Object{

?

/**

* @param args

*/

public static void main(String[] args) {

ExecutorService threadPool = Executors.newCachedThreadPool();

? ? ? ? final CompletionService<Integer> cs = new ExecutorCompletionService<Integer>(threadPool);

? ? ? ? for(int i = 1; i < 5; i++) {

? ? ? ? ? ? final int taskID = i;

? ? ? ? ? ? cs.submit(new Callable<Integer>() {

? ? ? ? ? ? ? ? public Integer call() throws Exception {

? ? ? ? ? ? ? ? Thread.sleep(1000);

? ? ? ? ? ? ? ? ? ? return taskID;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? });

? ? ? ? }

? ? ? ? System.out.println(" ***");

? ? ? ? new Thread(){

? ? ? ? public void run(){

? ? ? ?// 可能做一些事情

? ? ? ?for(int i = 1; i < 5; i++) {

? ? ? ? ? ?try {

? ? ? ? ? ? ? ?System.out.println(cs.take().get());

? ? ? ? ? ?} catch (InterruptedException e) {

? ? ? ? ? ? ? ?e.printStackTrace();

? ? ? ? ? ?} catch (ExecutionException e) {

? ? ? ? ? ? ? ?e.printStackTrace();

? ? ? ? ? ?}

? ? ? ?}

? ? ? ? }

? ? ? ? }.start();

? ? ? ? System.out.print(" pong");

}

void c(){

ExecutorService threadPool = Executors.newSingleThreadExecutor();

? ? ? ? Future<Integer> future = threadPool.submit(new Callable<Integer>() {

? ? ? ? ? ? public Integer call() throws Exception {

? ? ? ? ? ? Thread.sleep(1000);

? ? ? ? ? ? ? ? return new Random().nextInt(100);

? ? ? ? ? ? }

? ? ? ? });

? ? ? ??

? ? ? ? ?future = threadPool.submit(new Callable<Integer>() {

? ? ? ? ? ? public Integer call() throws Exception {

? ? ? ? ? ? Thread.sleep(1000);

? ? ? ? ? ? int i=new Random().nextInt(100);

? ? ? ? ? ? System.out.println(i);

? ? ? ? ? ? ? ? return i;

? ? ? ? ? ? }

? ? ? ? });

? ? ? ??

? ? ? ? ?future = threadPool.submit(new Callable<Integer>() {

? ? ? ? ? ? public Integer call() throws Exception {

? ? ? ? ? ? Thread.sleep(1000);

? ? ? ? ? ? ? ? return new Random().nextInt(100);

? ? ? ? ? ? }

? ? ? ? });

? ? ? ??

? ? ? ? System.out.print(" pong");

}

void b(){

for(int i=0;i<5;i++){

Callable<String> c = new Callable<String>(){

public String call() throws Exception {

Thread.currentThread().sleep(2000);

System.out.println("call");

return String.valueOf(new Random().nextInt(100));

}

};

FutureTask<String> future = new FutureTask<String>(c);

? ? ? ?new Thread(future).start();

? ? ? ?

? ? ? ?try {

Thread.currentThread().sleep(1000);

String s;

s = future.get();

System.out.println(s);

}

? ? ? ?catch (InterruptedException e) {

System.out.println("**1**");

e.printStackTrace();

}catch (ExecutionException e) {

e.printStackTrace();

}

}

System.out.print(" pong");

}

void a(){

//int i=0,j,k=0;

//for(j=0;i<6 && j<10;i++,j++){

//k=i+j;

//}

//System.out.println("i="+i + ",j="+j);

?

Callable<String> c = new Callable<String>(){

public String call() throws Exception {

Thread.currentThread().sleep(2000);

System.out.println("call");

return String.valueOf(new Random().nextInt(100));

}

};

FutureTask<String> future = new FutureTask<String>(c);

? ? ? ?new Thread(future).start();

? ? ? ?

? ? ? ?try {

Thread.currentThread().sleep(1000);

String s;

s = future.get();

System.out.println(s);

}

? ? ? ?catch (InterruptedException e) {

System.out.println("**1**");

e.printStackTrace();

}catch (ExecutionException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

/*new Thread(){

public void run() {

?

System.out.print("ping");

}

}.start();

try {

Thread.currentThread().sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.print(" pong");

*/

System.out.print(" pong");

}

?

}

发表评论
用户名: 匿名