Java使用Callable接口实现多线程的实例代码
作者:Rooker
这篇文章主要介绍了Java使用Callable接口实现多线程的实例代码,实现Callable和实现Runnable类似,但是功能更强大,具体表现在可以在任务结束后提供一个返回值,Runnable不行,call方法可以抛出异,Runnable的run方法不行,需要的朋友可以参考下
通过Callable接口实现多线程
实现Callable重写call方法
实现Callable和实现Runnable类似,但是功能更强大,具体表现在
- 可以在任务结束后提供一个返回值,Runnable不行
- call方法可以抛出异常,Runnable的run方法不行
- 可以通过运行Callable得到的Fulture对象监听目标线程调用call方法的结果,得到返回值,(fulture.get(),调用后会阻塞,直到获取到返回值)
1.Callable接口介绍:
(1)java.util.concurrent.Callable是一个泛型接口,只有一个call()方法
(2)call()方法抛出异常Exception异常,且返回一个指定的泛型类对象
2.Callable接口实现多线程的应用场景
当父线程想要获取子线程的运行结果时
3.使用Callable接口实现多线程的步骤
(1)第一步:创建Callable子类的实例化对象
(2)第二步:创建FutureTask对象,并将Callable对象传入FutureTask的构造方法中(注意:FutureTask实现了Runnable接口和Future接口)
(3)第三步:实例化Thread对象,并在构造方法中传入FurureTask对象
(4)第四步:启动线程
例1(利用Callable接口实现线程)
利用Callable接口创建子线程类:
package com.my.frame; import java.util.concurrent.Callable; public class ThreadCall implements Callable<String> { @Override public String call() throws Exception { // TODO Auto-generated method stub System.out.println("====="); return "9999"; } }
package com.my.frame; import java.util.concurrent.FutureTask; public class TestThread { public static void main(String[] args) { FutureTask<String> ft = new FutureTask<>(new ThreadCall()); new Thread(ft).start(); } }
例2(匿名类部类实现Callable接口创建子线程)
匿名类部类实现Callable接口创建子线程类并实现:
package call; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; //匿名类部类实现Callable接口创建子线程 public class AnonyCallable { public static void main(String[] args) { Callable<String> cl = new Callable<String>() { @Override public String call() throws Exception { System.out.println(Thread.currentThread().getName() + "正在行军~~~"); System.out.println(Thread.currentThread().getName() + "遭遇敌军~~~"); System.out.println(Thread.currentThread().getName() + "奋勇杀敌!!!!"); return "战斗胜利,俘虏敌军50000人"; } }; FutureTask<String> ft = new FutureTask(cl); new Thread(ft, "李存孝部队").start(); try { Thread.currentThread().setName("李存勖部队"); Thread.sleep(3000); System.out.println(Thread.currentThread().getName() + "休整3000ms"); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "整顿完毕,等待友军消息..."); try { String str = ft.get(); System.out.println("李存勖部队得知友军消息为:" + str); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } } }
到此这篇关于Java使用Callable接口实现多线程的实例代码的文章就介绍到这了,更多相关Java使用Callable接口实现多线程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- Java使用多线程批次查询大量数据(Callable返回数据)方式
- Java通过Callable实现多线程
- Java多线程中Callable和Future的解读
- Java中的Callable实现多线程详解
- Java多线程实现之Callable详解
- Java中Runnable和Callable分别什么时候使用
- Java中Runnable与Callable接口的区别详解
- 详解Java中Callable和Future的区别
- Java使用Runnable和Callable实现多线程的区别详解
- java面试常问的Runnable和Callable的区别
- Java并发教程之Callable和Future接口详解
- Java中callable的实现原理