Java多线程 - Callable和Future
2014-12-02 23:08
477 查看
已知的创建多线程的方法有继承Tread类和实现Runnable方法。此外Java还提供了Callable接口,Callable接口也提供了一个call()方法来做为线程执行体。但是call()方法与run()方法有些不同:
call()方法可以有返回值 call()方法可以抛出异常
不过Java不允许Callable对象直接作为Thread的target。而且call()方法还有一个返回值——call()方法并不是直接调用,他是做为线程执行体被调用的。Java提供了Future接口来代表Callable接口里call()方法的返回值,并为Future接口提供了一个FutureTask实现类,该实现类实现了Future接口,并实现了Runnable接口,因此可以将之作为Thread的target。
使用Callable和Future创建线程的步骤如下:
创建Callable接口的实现类,并实现call方法;
创建Callable接口实现类的实例,使用FutureTask类来包装Callable对象;
使用FutureTask对象作为Thread对象的target创建并启动新线程;
调用FutureTask对象的方法来获得子线程执行结束后的返回值。
附上实现代码:
call()方法可以有返回值 call()方法可以抛出异常
不过Java不允许Callable对象直接作为Thread的target。而且call()方法还有一个返回值——call()方法并不是直接调用,他是做为线程执行体被调用的。Java提供了Future接口来代表Callable接口里call()方法的返回值,并为Future接口提供了一个FutureTask实现类,该实现类实现了Future接口,并实现了Runnable接口,因此可以将之作为Thread的target。
使用Callable和Future创建线程的步骤如下:
创建Callable接口的实现类,并实现call方法;
创建Callable接口实现类的实例,使用FutureTask类来包装Callable对象;
使用FutureTask对象作为Thread对象的target创建并启动新线程;
调用FutureTask对象的方法来获得子线程执行结束后的返回值。
附上实现代码:
package net.ibuluo.hunter; import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; class MyThread implements Callable<String>{ public String call() throws Exception { for(int i=0; i<20; i++){ System.out.println(Thread.currentThread().getName() + " ---- " + i); } return "This is a Test!"; } } public class Test { public static void main(String[] args) { MyThread mt = new MyThread(); FutureTask<String> ft = new FutureTask<String>(mt); for(int i=0; i<20; i++){ System.out.println(Thread.currentThread().getName() + " ---- " + i); if(i==10){ new Thread(ft, "子线程1").start(); } } try{ System.out.println("子线程返回值:" + ft.get()); }catch(Exception e){ e.printStackTrace(); } } }
相关文章推荐
- Java多线程 callable和future
- java多线程总结笔记3——Callable和Future
- JAVA多线程实现的三种方式(继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程)
- 多线程并发库高级应用 之 java5中的线程并发库--线程池、Callable&Future
- 多线程并发库高级应用 之 java5中的线程并发库--线程池、Callable&Future
- Java多线程与并发库高级应用之Callable和Future
- Java多线程与并发应用-(8)-Callable和Future
- Java多线程编程--(8)学习Java5.0 并发编程包--线程池、Callable & Future 简介
- 多线程并发库高级应用 之 java5中的线程并发库--线程池、Callable&Future
- Java 7之多线程线程池 - Callable和Future
- Java 7之多线程线程池 - Callable和Future
- Java - 多线程Callable、Executors、Future
- 黑马程序员——Java多线程—Callable、Future
- Java多线程:Callable、ExecutorService、CountDownLatch、Future和FutureTask
- Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果
- java多线程Future和Callable用法
- JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没
- Java多线程——Callable与Future
- Java多线程3-线程池、Callable和Future
- Java多线程21:多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask