java Callable Future

原创 2016年06月01日 16:36:41
@FunctionalInterface
public interface Runnable {
   public abstract void run();
}

@FunctionalInterface
public interface Callable<V> {
   V call() throws Exception;
}

<pre name="code" class="java">public interface Future<V> {
boolean cancel(boolean mayInterruptIfRunning);

boolean isCancelled();

 boolean isDone();

 V get() throws InterruptedException, ExecutionException;

 V get(long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;
}

public interface RunnableFuture<V> extends Runnable, Future<V> {
    /**
     * Sets this Future to the result of its computation
     * unless it has been cancelled.
     */
    void run();
}





package com.provider.future;

import java.util.Random;
import java.util.concurrent.Callable;

public class Task implements Callable<Integer>{

	public Integer call() throws Exception {
		Thread.sleep(10000);
		Random r = new Random();
		return r.nextInt(1000);
	}

}

package com.provider.future;

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

public class TestFu {
	
	public void fun1(){
		ExecutorService executorService = Executors.newFixedThreadPool(2);
		Future<Integer> submit = executorService.submit(new Task());
		executorService.shutdown();
		
		System.out.println(submit.isDone());
		try {
			Thread.sleep(1500);
			System.out.println(submit.get());
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (ExecutionException e) {
			e.printStackTrace();
		}
	}
	
	public void fun2(){
		ExecutorService executorService = Executors.newFixedThreadPool(2);
		FutureTask<Integer> ft = new FutureTask<Integer>(new Task());
		executorService.submit(ft);
		executorService.shutdown();
		System.out.println(ft.isDone());
		try {
			Thread.sleep(1500);
			System.out.println(ft.get());
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (ExecutionException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		TestFu testFu =new TestFu();
		testFu.fun1();
		testFu.fun2();
	}

}




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Java 多线程设置线程超时时间之 Callable接口和Future接口

Callable接口和Future接口介绍         在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 ...

Java并发编程之Executor,Executors,ExecutorService,Future,Callable

Java并发编程之Executor,Executors,ExecutorService,Future,Callable

Java并发编程:Callable、Future

在Java中创建创建线程有两种方式,一种是直接继承自Thread类,另一种是实现Runnbale接口。而这两种方式都有一个缺陷:在线程执行完以后无法直接获取执行结果。如果想要获取执行结果可以通过共享变...

Java多线程——Callable、Future和FutureTask

通过Thread或Runnable创建的线程,都需要重写run方法,而run方法的返回是void的,所以使用这种方式无法获取线程执行结果。但java提供了其他类和方法来获取线程执行结果,主要的类有Ca...

java并发编程系列之Callable与Future的应用

在我们传统的观念中,创建线程无非就两种方式:1、直接new 一个Thread;2、实现Runnable,其实这两种方式的实质是一样的,有一个共同的特点:无返回值,并且无法抛出返回结果的异常,顺便我们讲...

我之见--java 多线程Callable和Future

前面我们说的线程都是没有返回值的,可以有

Java多线程系列--Callable和Future

概要 本章介绍线程池中的Callable和Future。 Callable 和 Future 简介 示例和源码分析(基于JDK1.7.0_40) 转载请注明出处:http://www.cnblog...
  • sjyttkl
  • sjyttkl
  • 2017年07月19日 09:17
  • 93

Java Thread&Concurrency(7): 深入理解Callable/Future(FutureTask)接口及其实现

public void run() { if (state != NEW || !UNSAFE.compareAndSwapObject(this, runne...

java中的Callable和Future的使用和困惑

java中还提供了可以返回值的线程池,例子如下: import java.util.concurrent.Callable; import java.util.concurrent.Execu...
  • com360
  • com360
  • 2011年09月21日 12:20
  • 9644
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java Callable Future
举报原因:
原因补充:

(最多只允许输入30个字)