5、JUC--实现 Callable 接口】的更多相关文章

Callable接口和JUC辅助类 Callable接口: 回顾: 创建线程的四种方式: 继承Thread 实现runnable接口 实现callable接口 使用线程池 之前的文章:多线程编程1-定义理解与三种实现方式 Runnable和Callable接口的差异: Runnable无返回值,Callable有返回值 Runnable不抛异常,Callable抛异常 实现名称不同,Runnable是run方法,Callable是call方法 class MyThread1 implements…
Callable接口和FutureTask实现类,是JUC(Java Util Concurrent)包中很重要的两个技术实现,它们使获取多线程运行结果成为可能.它们底层的实现,就是基于接口回调技术.接口回调,许多程序员都耳熟能详,这种技术被广泛应用于异步模块的开发中.它的实现原理并不复杂,但是对初学者来说却并不友好,其中的一个原因是它的使用场景和处理手段,对习惯了单线程开发的初学者来说有点绕.而各种文章或书籍,在解释这一个问题的时候,往往忽视了使用场景,而举一些小明坐车.A和B等等的例子,初学…
一.callable接口是什么? 面试题: 获得多线程的方法几种? 正确答案如下: 传统的 是继承thread类和实现runnable接口, java5以后又有实现 callable接口 和 java的线程池获得 函数式接口 这是一个函数式接口,因此可以用作lambda表达式或方法引用的赋值对象 . 二.与runnable对比(实现方法对比)  面试题:callable接口与runnable接口的区别?    答:(1)是否有返回值     (2)是否抛异常     (3)落地方法不一样,一个是…
package com.hls.juc; import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask; /** * 创建多线程的方式 : 4种 * 1.继承Thread类 * 2.实现Runable接口 * 3.实现Callable接口 * 4.使用线程池创建线程 * * Callable相比Runable的区别…
创建执行线程有四种方式: 实现implements接口创建线程 继承Thread类创建线程 实现Callable接口,通过FutureTask包装器来创建线程 使用线程池创建线程 下面介绍通过实现Callable接口来创建线程. package com.ccfdod.juc; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurre…
Callable接口 ① Java 5.0 在 java.util.concurrent 提供了一个新的创建执行 线程的方式:Callable 接口② Callable 接口类似于 Runnable,两者都是为那些其实例可 能被另一个线程执行的类设计的. 但是 Runnable 不会返 回结果,并且无法抛出经过检查的异常.③ Callable 需要依赖FutureTask ,FutureTask 也可以用作闭 锁 TestCallable package com.aff.juc; import…
1. Callable与Runable区别 Java从发布的第一个版本开始就可以很方便地编写多线程的应用程序,并在设计中引入异步处理.Thread类.Runnable接口和Java内存管理模型使得多线程编程简单直接. 但Thread类和Runnable接口都不允许声明检查型异常,也不能定义返回值.没有返回值这点稍微有点麻烦.不能声明抛出检查型异常则更麻烦一些. public void run()方法契约意味着你必须捕获并处理检查型异常.即使你小心地保存了异常信息(在捕获异常时)以便稍后检查,但也…
public interface Executor { /** * Executes the given command at some time in the future.  The command * may execute in a new thread, in a pooled thread, or in the calling * thread, at the discretion of the <tt>Executor</tt> implementation. * *…
多线程有两种实现方式: 一种是实现Runnable接口,另一种是继承Thread类,这两种方式都有缺点,run方法没有返回值,不能抛出异常(这两个缺点归根到底是Runable接口的缺陷,Thread也是实现了Runnable接口),如果需要知道一个线程的运行结果就需要用户自行设计,线程类自身也不能提供返回值和异常. 但是从JDK1.5之后引入了一个新的接口Callable,它类似于Runnable接口,实现它就可以实现多线程任务,Callable接口的定义如下: public interface…
前两篇博客(多线程--继承Thread类.多线程--实现Runnable接口 )介绍了java使用线程的两种方法.这篇博客继续介绍第三种方法--实现Callable接口. 先说一下Runnable和Callable的差别: 1.Callable规定的方法是call(),Runnable规定的方法是run(). 2.Callable的任务运行后可返回值.而Runnable的任务是不能返回值得 3.call方法能够抛出异常,run方法不能够 4.运行Callable任务能够拿到一个Future对象,…
Callable 和 Future接口  Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务. Callable和Runnable有几点不同: (1)Callable规定的方法是call(),而Runnable规定的方法是run(). (2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值的. (3)call()方法可抛出异常,而run()方法是不能抛出异常的. (4)运行Callable任务…
1.使用Callable接口的方式实现多线程,这是JDK5.0新增的一种创建多线程的方法 package com.baozi.java2; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; public class ThreadNew { public static void main(Strin…
1.实现Callable接口,重写call方法,有返回值 2.通过实现Callable接口创建的线程只能在线程池中使用. 3.返回值就是run方法返回的对象 4.通过future.get()可以获取到返回的内容 实现Callable接口 /** * * @author Administrator *实现callable接口,重写call方法,存在返回值 */ public class CallableTest implements Callable<String>{ @Override pub…
Callable java5之前是没有返回值的,Java5新增了Callable接口获得线程的返回值,可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口.Callable的call方法可以根据你传入的泛型参数返回对应类型的数据.执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了. 示例: package thread_Callable; import java.util.co…
类继承关系 Callable接口 @FunctionalInterface public interface Callable<V> { V call() throws Exception; } Callable接口中只有一个call()方法,和Runnable相比,该方法有返回值并允许抛出异常. 但是这里有一个问题,进程是要通过Thread类去创建的,但是Thread的target必须是实现了Runnable接口的类对象,所以Callable对象无法直接作为Thread对象的接口:所以要想作…
Callable接口  Java 5.0 在 java.util.concurrent 提供了一个新的创建执行 线程的方式:Callable 接口  Callable 接口类似于 Runnable,两者都是为那些其实例可 能被另一个线程执行的类设计的.但是 Runnable 不会返 回结果,并且无法抛出经过检查的异常.  Callable 需要依赖FutureTask ,FutureTask 也可以用作闭锁 创建执行线程的方法有四种: 1.继承Thread类或者创建线程类 2.通过实现Ru…
1. Callable与Runable区别 Java从发布的第一个版本开始就可以很方便地编写多线程的应用程序,并在设计中引入异步处理.Thread类.Runnable接口和Java内存管理模型使得多线程编程简单直接. 但Thread类和Runnable接口都不允许声明检查型异常,也不能定义返回值.没有返回值这点稍微有点麻烦.不能声明抛出检查型异常则更麻烦一些. public void run()方法契约意味着你必须捕获并处理检查型异常.即使你小心地保存了异常信息(在捕获异常时)以便稍后检查,但也…
通过实现Runnable接口的实现 package Thread; import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors; public class RunnableThreadDemo { private static int POOL_NUM = 30; // 线程池数量 public static void main(String[] args) throws Interrupte…
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…
实际开发过程中,我们常常需要等待一批线程都返回结果后,才能继续执行.<线程等待——CountDownLatch使用>中我们介绍了CountDownLatch的使用,通过使用CountDownLatch,可以实现线程等待. JDK 1.8实现了一种更好的方式,实现线程等待与获取线程返回值,那就是Callable接口,下面我们来看看具体代码. package com.coshaho.learn; import java.util.Random; import java.util.concurren…
本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果.        Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务的返回值,下面来看一个简单的例子: public class CallableAndFuture { public static v…
Java 5.0 在 java.util.concurrent 提供了一个新的创建执行线程的方式:Callable 接口Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的.但是 Runnable 不会返回结果,并且无法抛出经过检查的异常.Callable 需要依赖FutureTask ,FutureTask 也可以用作闭锁. 例子: package com.company; import java.util.concurrent.Callable;…
实现Callable接口创建线程 Callable接口是在jdk5版本中加入的,这个接口在java.util.concurrent包下面,与其他两种方式不同的地方在于使用Callable接口创建的线程会获得一个返回值并且可以声明异常. 使用Callable创建线程步骤: 1.自定义一个类实现java.util.concurrent包下的Callable接口 2.重写call方法 3.将要在线程中执行的代码编写在call方法中 4.创建ExecutorService线程池 5.将自定义类的对象放入…
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; /* * 一.创建执行线程的方式三:实现 Callable 接口. 相较于实现 Runnable 接口的方式,方法可以有返回值,并且可以抛出异常. * * 二.执行 Callable 方式,需要 FutureTask 实现类的支持,用于接收运算结果…
一.简单使用 Runnable是执行工作的独立任务,但是它不返回任何值.如果你希望任务完成的时能够返回一个值,那么可以实现一个Callable接口.在Java SE5中引入的Callable是一种具有类型参数的泛型,它的类型参数表示的是从call()方法中返回的值,并且必须用ExecutorService.submit()方法调用它.下面是一个简单的例子(摘自Java编程思想) class TaskWithResult implements Callable<String> { private…
1概念 1.1进程 进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 任务管理器中: 1.2线程 线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程.一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序. 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 1.3多线程 就是一个程序中有多个线程在同时执行. 单线程程序:多个任务只能依次执行.只有一个线程, 例:ma…
通过Callable接口创建线程 一.前言 Java中创建线程的方式有四中,前两种在前面我已经详细介绍过了(Runnable和Thread),不清楚的朋友们可看这里: Java多线程之线程的启动以及Java多线程之Runnable与Thread,至于最后一种创建线程的方式我会在后续的博文中做详细介绍,详情可关注我的博文. Java 5.0 在java.util.concurrent 提供了一个新的创建执行线程的方式:Callable 接口 Callable 接口类似于Runnable,两者都是为…
public class CallableDemo { public static void main(String[] args) throws Exception, ExecutionException { FutureTask<String> futureTask = new FutureTask<>(new CallableThread()); new Thread(futureTask,"A").start(); System.out.println(…
通过Callable和Future创建线程 i. 创建Callable接口的实现类,并实现call方法,该call方法将作为线程执行体,并且有返回值,可以抛出异常. ii. 创建Callable实现类的实例,使用FutureTask类包装Callable对象,该FuturedTask对象封装了Callable对象的call方法的返回值. iii. 使用FutureTask对象作为Thread对象的target,创建并启动新线程. iv. 调用FutureTask对象的get方法来获得子线程执行结…
Callable 接口 一.Java 5.0 在 java.util.concurrent 提供了 一个新的创建执行线程的方式(之前有继承Thread 和 实现Runnable):Callable 接口 Callable 接口类似于 Runnable ,两者都是为那些其 实例 可能被另外一个线程执行的类设计的.但是 Runnable 接口的 run方法,不会有返回值,并且无法抛出结果检查的异常 二.执行 Callable 方式 ,需要FutureTask 实现类的支持,用于接收运算结果(call…