首页 > 其他分享 >Callable接口

Callable接口

时间:2022-10-20 23:11:19浏览次数:39  
标签:String 接口 Callable futureTask FutureTask new

Callable接口

特点

image-20220416215811375

1.有返回

2.可以抛出异常

代码实现,Callable接口开启线程

public class CallableTest {
    public static void main(String[] args) throws ExecutionException, InterruptedException {

        MyThread thread = new MyThread();
        FutureTask futureTask = new FutureTask<>(thread);
        new Thread(futureTask).start();//这里只能接收runnable接口,所以通过中间商(FutureTask)进行转换
        String str =(String)futureTask.get(); //可能产生阻塞
        System.out.println(str);


    }
}

class MyThread implements Callable {

    @Override
    public String call() throws Exception {

        System.out.println("call()");

        return "这是一个callable()接口";
    }
}

这里使用FutureTask类

  FutureTask futureTask = new FutureTask<>(thread);

由于Thread的开启使用的是runnable接口实现,所以这里不能直接调用callable接口,需要通过中间商FutureTask起到承接作用

image-20220416220416529

Runnable和Callable的区别

1.实现方法不同 run( ) / call( )

2.callable有返回值,并且抛出异常

3.callable存在缓存机制,开启多个线程的情况下只会返回一个值

public class CallableTest {
    public static void main(String[] args) throws ExecutionException, InterruptedException {

        MyThread thread = new MyThread();
        FutureTask futureTask = new FutureTask<>(thread);
        new Thread(futureTask,"A" ).start();//这里只能接收runnable接口,所以通过中间商(FutureTask)进行转换
        new Thread(futureTask,"B").start();
    }
}

class MyThread implements Callable {

    @Override
    public String call() throws Exception {

        System.out.println("call()");

        return "这是一个callable()接口";
    }
}

image-20220416221100592

4.futureTask.get( ),可能会存在阻塞 , 解决方法放在运行代码的最下面

标签:String,接口,Callable,futureTask,FutureTask,new
From: https://www.cnblogs.com/wfy-studying/p/16811707.html

相关文章

  • Typescript索引和接口继承
    索引签名我们既可以使用数字索引去访问数组元素,也可以使用字符串索引去访问数组对象上的属性和方法。constcourse=['math','English','Chinese']//访问数组中的第二个......
  • 枚举类实现接口
    【1】定义一个接口1publicinterfaceTestInterface{2voidshow();3}【2】枚举类实现接口,并且重写show()方法publicenumSeasonimplementsTestInterfac......
  • 计算机RS232接口定义DB9
    左上角为1,右下角为9 DB91DCD载波检测2RXD接收数据3TXD发送数据4DTR数据终端准备好5SGND信号地线6DSR数据准备好7RTS请求发送8CTS清除发送9RI振铃提示......
  • 接口interface
    接口interface一个完整的项目:class,interface,enum,annation+资源文件(配置文件)+jar接口语法:publicinterface接口名称{}类与类单继承关系,利用接口进行弥补单根继承......
  • 01-Jmeter-单个接口练习
    一、环境准备1、启动虚拟机->启动电商项目->获取虚拟机的IP地址  2、启动Jmeter工具二、单个注册接口->正向测试1、添加线程组2、添加HTTP请求(1)协议:http,服务器......
  • 学习收-C#接口的作用实例解析
    一、接口的作用:我们定义一个接口:publicinterfaceIBark{voidBark();}1、 再定义一个类,继承于IBark,并且必需实现其中的Bark()方法publicclassDog:IBa......
  • ecshop 文章采集批量发布接口 继ecshop 商品属性批量采集 图片批量去水印后 特又做了
    ecshop文章分类自动采集入库的mysql语句如下:INSERTINTO`ec`.`ecs_article_cat`(cat_name,cat_type,cat_desc,keywords,parent_id,sort_order,show_in_nav)......
  • 接口测试结果字段太多,断言烦不胜烦,DeepDiff帮你一键搞定
    每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试,领取资料可加:magetest码同学抖音号:小码哥聊软件测试背景最......
  • 多线程中Callable简单使用
    Callable接口具备的特征如下1.有简单的类型参数,与call()方法的返回类型相对应2.声明了call方法,执行器运行任务时,该方法会被执行器执行,它必须返回声明中指定类型的对象3.......
  • 为 C++程序添加 C 接口
    为C++程序添加C语言接口总共有两个要注意的点,如下要在接口定义中添加extern"C"的声明进行链接时需要使用C++的标准库原始的C++程序animal.h#ifndef_AN......