基于Java Callable接口实现线程代码实例
实现Callable接口(jdk8新特性)
可以获得线程的返回值
*前两种方式没有返回值,因为run方法返回void
创建一个未来任务类对象 Futrue task = new Future(Callable<>);重写call()方法 可以使用匿名内部类方式
task.get()方法获取线程返回结果
get方法执行会导致当前方法阻塞 效率较低
代码如下
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; public class Test_13 { public static void main(String[] args) { System.out.println(Thread.currentThread().getName() + "begin"); FutureTask task = new FutureTask(new Callable() { @Override public Object call() throws Exception { System.out.println(Thread.currentThread().getName() + "start"); Thread.sleep(1000 * 5); int a = 100; int b = 200; System.out.println(Thread.currentThread().getName() + "over"); return a + b; } }); Thread thread = new Thread(task); thread.start(); try { System.out.println(task.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "end"); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
Java并发编程Callable与Future的应用实例代码
本文主要探究的是java并发编程callable与future的使用,分享了相关实例代码,具体介绍如下. 我们都知道实现多线程有2种方式,一种是继承Thread,一种是实现Runnable,但这2种方式都有一个缺陷,在任务完成后无法获取返回结果.要想获得返回结果,就得使用Callable,Callable任务可以有返回值,但是没法直接从Callable任务里获取返回值:想要获取Callabel任务的返回值,需要用到Future.所以Callable任务和Future模式,通常结合起来使用. 试想
-
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和Future来接收线程池的执行结果
在Java的线程执行中,不管是直接继承Thread的方式,还是实现Runnable接口的方式,都不会获取到线程执行的返回结果.这样如果线程在执行过程中出现了错误,那么主线程也不会感知到.即使打印了日志,也不能立即抛出异常.事后查看日志才能发现出现了bug.而且到那时发生问题的代码点距离真正的问题点可能会相差很远.如果在线程池执行的过程中出现了bug能及时地抛出异常,那么这将会是一个很好的实现.解决上述问题的办法是使用Callable接口,其可以获取到线程的返回结果,通过Future的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接口实现代码示例
对于多线程,大家并不陌生,对于如何创建线程也是轻车熟路,对于使用new thread和实现runable接口的方式,不再多说.这篇博文我们介绍第三种:实现Callable接口. Callable接口 接口定义: @FunctionalInterface public interface Callable<V> { V call() throws Exception; } 从Callable的定义可以看出: Callable接口类似于Runnable,两者都是为那些其实例可能被另一个线程执行的类
-
浅谈在Java中使用Callable、Future进行并行编程
使用Callable.Future进行并行编程 在Java中进行并行编程最常用的方式是继承Thread类或者实现Runnable接口.这两种方式的缺点是在任务完成后无法直接获取执行结果,必须通过共享变量或线程间通信,使用起来很不方便. 从Java1.5开始提供了Callable和Future两个接口,通过使用它们可以在任务执行完毕后得到执行结果. 下面我们来学习下如何使用Callable.Future和FutureTask. Callable接口 Callable接口位于java.util.co
-
java多线程返回值使用示例(callable与futuretask)
Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务的返回值,下面来看一个简单的例子 复制代码 代码如下: package com.future.test; import java.io.FileNotFoundException;import java.io.IOException;i
-
Java的JDBC中Statement与CallableStatement对象实例
JDBC Statement对象实例 以下是利用以下三种查询以及打开和关闭说明的例子: boolean execute(String SQL) : 返回一个布尔值true,如果ResultSet对象可以被检索,否则返回false.使用这个方法来执行SQL DDL语句,或当需要使用真正的动态SQL. int executeUpdate(String SQL) : 返回受影响的SQL语句执行的行数.使用此方法来执行,而希望得到一些受影响的行的SQL语句 - 例如,INSERT,UPDATE或DELE
-
基于Java Callable接口实现线程代码实例
实现Callable接口(jdk8新特性) 可以获得线程的返回值 *前两种方式没有返回值,因为run方法返回void 创建一个未来任务类对象 Futrue task = new Future(Callable<>);重写call()方法 可以使用匿名内部类方式 task.get()方法获取线程返回结果 get方法执行会导致当前方法阻塞 效率较低 代码如下 import java.util.concurrent.Callable; import java.util.concurrent.Exec
-
基于Java创建一个订单类代码实例
这篇文章主要介绍了基于Java创建一个订单类代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需求描述 定义一个类,描述订单信息 订单id 订单所属用户(用户对象) 订单所包含的商品(不定数量个商品对象) 订单总金额 订单应付金额: 总金额500~1000,打折85折 总金额1000~1500,打折80折 总金额1500~2000,打折70折 总金额超过2000,打折65折 在此基础上,还要看用户的vip等级 用户vip等级为:一般会员,
-
基于Java判断网络是否正常代码实例
判断网络是否正常使用 代码如下 /** * 判断网络是否正常 * @return */ public static boolean isConnect(String ipPath){ //定义其返回的状态,默认为false,网络不正常 boolean connect = false; /** * 用Runtime.getRuntime().exec()来调用系统外部的某个程序, * 他会生成一个新的进程去运行调用的程序. * 此方法返回一个java.lang.Process对象, * 该对象可以
-
基于java查找最长字符串代码实例
题目:编写程序,针对输入的N个字符串,输出其中最长的字符串 输入样例: 4 zhaoming zhangming sunming liming 输出样例: 最长的字符串:zhangming 代码如下 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int t = sc.nextInt(); int
-
java基于poi导出excel透视表代码实例
这篇文章主要介绍了java基于poi导出excel透视表代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从前,我是一个前端程序猿,怀着对打通任(前)督(后)二(开)脉(发)的梦想转了后端,自学两礼拜java+spring全家桶,直接上项目实战.最近接到一需求:将业务数据导出一张透视表. 需求开发完成已近有一段时间了,甲方的大爷大妈,爷爷奶奶们也都用的很开心,我也很开心,于是就心想咱学了也不能白学,所以写下这篇随笔. 先看下用easypo
-
详解Java Callable接口实现多线程的方式
在Java 1.5以前,创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口.无论我们以怎样的形式实现多线程,都需要调用Thread类中的start方法去向操作系统请求io,cup等资源.因为线程run方法没有返回值,如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦. 而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果. Callable和Future介
-
Java创建与结束线程代码示例
本文讲述了在Java中如何创建和结束线程的最基本方法,只针对于Java初学者.一些高级知识如线程同步.调度.线程池等内容将会在后续章节中逐步深入. 创建线程 创建普通线程有两种方式,继承Thread类或实现Runnable接口.示例如下. 方法1:继承Thread类 创建方法示例: public class MyThread1 extends Thread { @Override public void run() { //TODO Auto-generated method stub supe
-
java Runnable接口创建线程
java Runnable接口创建线程 创建一个线程,最简单的方法是创建一个实现Runnable接口的类. 为了实现Runnable,一个类只需要执行一个方法调用run(),声明如下: public void run() 你可以重写该方法,重要的是理解的run()可以调用其他方法,使用其他类,并声明变量,就像主线程一样. 在创建一个实现Runnable接口的类之后,你可以在类中实例化一个线程对象. Thread定义了几个构造方法,下面的这个是我们经常使用的: Thread(Runnable th
-
基于Java中UDP的广播形式(实例讲解)
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议.UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地 ,也不能保证数据包到达的顺序.由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快. 在Java中UDP的实现: * UDP: * 客户端: * 1.创建用于UDP通信的socket对象---DatagramSocket(用于UDP数据的发送和接收)---数据报套接字 * 2.准备数据,封装包
-
java实现python session功能代码实例
这篇文章主要介绍了java实现python session功能代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 怎么在java中实现类似于python的requests模块的session功能呢.java也是可以实现的,用java的okhttp包可以实现. 在pom.xml中加入相关依赖 <!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp --> <
随机推荐
- Nginx多层代理配置方法
- Java生成含字母和数字的6位随机字符串
- java随机抽取指定范围不重复的数字
- 解析javascript瀑布流原理实现图片滚动加载
- javascript实现类似百度分享功能的方法
- Windows下PHP5和Apache的安装与配置
- Python函数的周期性执行实现方法
- C语言中数据结构之链式基数排序
- THREE.JS入门教程(5)你应当知道的十件事
- Yii 连接、修改 MySQL 数据库及phpunit 测试连接
- 3种php生成唯一id的方法
- Mysql大小写敏感的问题
- Java微信公众平台开发(3) 接收消息的分类及实体的创建
- js实现图片从左往右渐变切换效果的方法
- 在Python中使用Neo4j数据库的教程
- Android 隐藏及切换显示键盘
- spring boot 的常用注解使用小结
- 详细分析单线程JS执行问题
- 简述Python2与Python3的不同点
- 基于VuePress 轻量级静态网站生成器的实现方法