21.线程的实现方式三 ---实现Callable接口
2017-04-04 16:39
357 查看
①Java5.0在Java.util.concurrent提供了一个新的创建执行线程的方式:Callable接口
②Callable接口类似Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是Runnable不会返回结果,并且无法抛出经过检查的异常。
③Callable需要依赖FutureTask,FutureTask也可以用作闭锁
案例:
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/**
* 创建执行线程的方式三:实现Callable接口。相较于实现Runnable接口的方式,方法可以有返回值,并且可以抛出异常
* 执行Callable方式,需要Futuretask实现类的支持,用于接收运算结果。FutureTask是Future接口的实现类
*/
public class TestCallable {
public static void main(String[] args) {
ThreadCallable tc = new ThreadCallable();
//1.执行Calable方式,需要FutureTask实现类的支持,用于接收运算结果
FutureTask<Integer> result = new FutureTask<Integer>(tc);
new Thread(result).start();
//2.接收线程运算后的结果
try {
Integer sum = result.get();//FutureTask可用于闭锁,意思是先执行完线程在计算最后的结果
System.out.println(sum);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
class ThreadCallable implements Callable<Integer>{
public Integer call() throws Exception {
int sum = 0;
for (int i = 0; i <=100; i++) {
sum += i;
}
return sum;
}
}
②Callable接口类似Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是Runnable不会返回结果,并且无法抛出经过检查的异常。
③Callable需要依赖FutureTask,FutureTask也可以用作闭锁
案例:
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/**
* 创建执行线程的方式三:实现Callable接口。相较于实现Runnable接口的方式,方法可以有返回值,并且可以抛出异常
* 执行Callable方式,需要Futuretask实现类的支持,用于接收运算结果。FutureTask是Future接口的实现类
*/
public class TestCallable {
public static void main(String[] args) {
ThreadCallable tc = new ThreadCallable();
//1.执行Calable方式,需要FutureTask实现类的支持,用于接收运算结果
FutureTask<Integer> result = new FutureTask<Integer>(tc);
new Thread(result).start();
//2.接收线程运算后的结果
try {
Integer sum = result.get();//FutureTask可用于闭锁,意思是先执行完线程在计算最后的结果
System.out.println(sum);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
class ThreadCallable implements Callable<Integer>{
public Integer call() throws Exception {
int sum = 0;
for (int i = 0; i <=100; i++) {
sum += i;
}
return sum;
}
}
相关文章推荐
- 多线程之创建线程的方式之一:实现Callable接口(三)
- JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没
- 多线程之创建线程的方式之一:实现Callable接口
- 多线程之创建线程的方式之一:实现Callable接口(三)
- JUC-006-创建线程的方式三-实现Callable接口
- 创建执行线程的方式三:实现 Callable 接口
- java多线程 -- 创建线程的第三者方式 实现Callable接口
- 创建线程的第三种方式:实现Callable接口
- Java 线程与并发研究系列二(实现Callable接口)
- 线程的第二种创建方式 实现接口Runnable
- 创建线程的第二种方式:实现一个接口Runnable。
- JAVA多线程实现的三种方式(继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程)
- 03_线程的创建和启动_实现Runnable接口方式
- 创建线程的两种方式:继承Thread类和实现Runnable接口
- Executor接口实现线程有返回值和无返回值两种方式
- Java线程之Callable接口实现线程
- ForkJoinTask以及实现callable接口创建线程的学习
- java笔记--用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程
- Java多线程实用篇之实现Callable接口,处理带有返回值的线程!
- java创建线程的第二种方式:实现Runnable接口