Java Callable接口实现细节详解
代码如下
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/**
 * @author lzq
 * @data 2020/4/30 0030 - 下午 4:02
 */
public class Test2 {
  public static void main(String[] args) throws ExecutionException, InterruptedException {
    MyThread thread=new MyThread();
    FutureTask task = new FutureTask(thread);
    new Thread(task,"a").start();
    new Thread(task,"b").start();
    System.out.println(task.get());
  }
 }
class MyThread implements Callable<String> {
  @Override
  public String call() {
    System.out.println("实现callable");
    return "得到返回值";
  }
}
执行结果为:
        
上面是使用Callable接口简单实现多线程,使用这个接口要使用FutrueTask类作为简单的适配类,因为Thread构造方法只能接受Runnable接口参数,下面源码中看出FutrueTask的对象为什么也能作为Runnable型参数传给Thread构造方法

再分析一下结果,可以看到明明启动了a,b两个线程,但是只输出了一个线程的结果,这是因为运行的结果会被缓存,使得线程的执行效率变高。还有一点就是获取线程返回值的get方法可能会产生阻塞,一般放在最后或者使用异步通信来处理。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
- 
                             
                            
Java多线程之Callable接口的实现
1.接口的定义: public interface Callable<V> { V call() throws Exception; } 2.Callable和Runnable的异同 先看下Runnable接口的定义 public interface Runnable { public abstract void run(); } Callable的call()方法类似于Runnable接口中run()方法,都定义任务要完成的工作,实现这两个接口时要分别重写这两个方法,主要的不同之处是call
 - 
                             
                            
java自定义任务类定时执行任务示例 callable和future接口使用方法
Callable 和 Future接口Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务. Callable和Runnable有几点不同: (1)Callable规定的方法是call(),而Runnable规定的方法是run().(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值的. (3)call()方法可抛出异常,而run()方法是不能抛出异常的.(4)运行Callable任务可拿到一
 - 
                             
                            
Java多线程实现Callable接口
调用方法: /** * 点击量/月(年)Callable */ public void yearlyClickCallable() { // 获取参数 String year = getPara("year"); // 统计数据集X List<String> xList = new ArrayList<String>(); xList.add("January"); xList.add("February"); xList
 - 
                             
                            
详解Java Callable接口实现多线程的方式
在Java 1.5以前,创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口.无论我们以怎样的形式实现多线程,都需要调用Thread类中的start方法去向操作系统请求io,cup等资源.因为线程run方法没有返回值,如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦. 而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果. Callable和Future介
 - 
                             
                            
Java多线程Callable和Future接口区别
Runnable是执行工作的独立任务,但是不返回任何值.如果我们希望任务完成之后有返回值,可以实现Callable接口.在JavaSE5中引入的Callable是一个具有类型参数的范型,他的类型参数方法表示为方法call()而不是run()中返回的值,并且必须使用ExecutorService.submint()方法进行调用. 代码如下 import java.util.concurrent.Callable; import java.util.concurrent.ExecutionExcep
 - 
                             
                            
Java多线程Callable接口实现代码示例
对于多线程,大家并不陌生,对于如何创建线程也是轻车熟路,对于使用new thread和实现runable接口的方式,不再多说.这篇博文我们介绍第三种:实现Callable接口. Callable接口 接口定义: @FunctionalInterface public interface Callable<V> { V call() throws Exception; } 从Callable的定义可以看出: Callable接口类似于Runnable,两者都是为那些其实例可能被另一个线程执行的类
 - 
                             
                            
Java Callable接口实现细节详解
代码如下 import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; /** * @author lzq * @data 2020/4/30 0030 - 下午 4:02 */ public class Test2 { public static void main(String[] args) throw
 - 
                             
                            
java Future 接口使用方法详解
java Future 接口使用方法详解 在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现. Future接口是Java标准API的一部分,在java.util.concurrent包中.Future接口是Java线程Future模式的实现,可以来进行异步计算. Future模式可以这样来描述:我有一个任务,提交给了Future,Future替我完成这个任务.期间我自己可以去做任何想做的事情.一段时间之后,我就便
 - 
                                                         
                            
Java+TestNG接口自动化入门详解
目录 一.环境准备:(根据自己电脑配置来选择安装版本,我的电脑是64位,所以此处选择64位安装) 二.环境安装: 三.TestNG接口自动化实现 四.创建自己的第一个接口自动化脚本 五.批量执行自动化脚本 六.生成并查看自动化测试报告 一.环境准备:(根据自己电脑配置来选择安装版本,我的电脑是64位,所以此处选择64位安装) JDK下载: JDK 1.8下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downl
 - 
                                                         
                            
Java中接口的多态详解
目录 多态参数 多态数组 接口的多态传递现象 总结 多态参数 就像我们现实生活中电脑的usb接口,我们既可以接受手机对象,又可以接受相机对象,等等,体现了接口的多态,查看以下代码 接口: package InterfaceM; public interface Interface { public void join(); public void stop(); } 手机类: package InterfaceM; public class Phone implements Interface{
 - 
                                                         
                            
Java中接口的深入详解
目录 一.前言 二.接口 接口的格式 三.接口的特点 接口的使用 四.类与接口的关系 接口多重继承的好处 练习 总结 一.前言 前面我们说了抽象类的概述,我们对抽象类也有个认识和理解了,现在我们学习十分重要的内容接口,接口这个词比较的抽象,但其实也是十分好理解的. 二.接口 简单的说,接口就是一种被规范的标准,只要符合这个标准都可以通用,接口的表现在于对行为的抽象. 就好比插座,每个厂商生产的插座我们都可以用,这是因为他们有同一个标准,这里插座就是接口. 接口的格式 格式1: public in
 - 
                             
                            
java Callable与Future的详解及实例
java Callable与Future Callable与 Future 两功能是Java在后续版本中为了适应多并法才加入的,Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其他线程执行的任务. Callable的接口定义如下: public interface Callable<V> { V call() throws Exception; <span id="transmark"></s
 - 
                             
                            
java Callable与Future的详解及实例
java Callable与Future Callable与 Future 两功能是Java在后续版本中为了适应多并法才加入的,Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其他线程执行的任务. Callable的接口定义如下: public interface Callable<V> { V call() throws Exception; <span id="transmark"></s
 - 
                                                         
                            
java Clone接口和深拷贝详解
对于数组的拷贝,如果是简单类型的话是深拷贝,如果是引用类型的话是浅拷贝,但是因为java是面向对象的,在回答面试官问题的时候,我们可以不用说的这么细,可以直接说浅拷贝. 代码示例1 class Person implements Cloneable{//如果想克隆自定义类,那么需要在自定义类上实现Cloneable接口 public int age; /*疑问:为什么这个接口是空接口呢?这是一个面试问题. 空节课:也把它叫做标记接口.其实就是这个意思:只要一个类实现了这个接口,那么就标记这个类是
 - 
                                                         
                            
Java 数据结构算法Collection接口迭代器示例详解
目录 Java合集框架 Collection接口 迭代器 Java合集框架 数据结构是以某种形式将数据组织在一起的合集(collection).数据结构不仅存储数据,还支持访问和处理数据的操作 在面向对象的思想里,一种数据结构也被认为是一个容器(container)或者容器对象(container object),它是一个能存储其他对象的对象,这里的其他对象常被称为数据或者元素 定义一种数据结构从实质上讲就是定义一个类.数据结构类应该使用数据域存储数据,并提供方法支持查找.插入和删除等操作 Ja
 
随机推荐
- 最简单的javascript对象实例代码
 - 通过5个php实例细致说明传值与传引用的区别
 - php开发分页实现代码第1/3页
 - 发一个php简单的伪原创程序,配合商城采集用的
 - php实现屏蔽掉黑帽SEO的搜索关键字
 - Android中Listview点击item不变颜色及设置listselector 无效的解决方案
 - php实现图片添加水印功能
 - You don’t have permission to access /index.php on.
 - 五种SQL Server分页存储过程的方法及性能比较
 - mysql修改开启允许远程连接的方法
 - fancybox modal的完美解决(右上的X)
 - 收藏的迅雷下载图文教程
 - Java获取时间年、月、日的方法
 - React应用中使用Bootstrap的方法
 - C#中将DataTable转换成CSV文件的方法
 - Android数据库LitePal的基本用法详解
 - 解决python打不开文件(文件不存在)的问题
 - Python3内置模块random随机方法小结
 - java打印指定年月的日历
 - Java中Http连接的两种方式(小结)
 
