From c70570200c2815854c78445a148d4126b68372a5 Mon Sep 17 00:00:00 2001 From: xuxin <840198532@qq.com> Date: Sat, 7 Mar 2026 13:42:15 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E9=98=B6day06-=E5=8F=AF=E4=BB=A5?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=AD=90=E7=BA=BF=E7=A8=8B=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E7=9A=84Callable=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/inmind/callable02/CallableImpl.java | 13 ++++++ .../src/com/inmind/callable02/Demo01.java | 43 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 javaSE-day06/src/com/inmind/callable02/CallableImpl.java create mode 100644 javaSE-day06/src/com/inmind/callable02/Demo01.java diff --git a/javaSE-day06/src/com/inmind/callable02/CallableImpl.java b/javaSE-day06/src/com/inmind/callable02/CallableImpl.java new file mode 100644 index 0000000..2a26772 --- /dev/null +++ b/javaSE-day06/src/com/inmind/callable02/CallableImpl.java @@ -0,0 +1,13 @@ +package com.inmind.callable02; + +import java.util.concurrent.Callable; + +public class CallableImpl implements Callable { + @Override + public Integer call() throws Exception { + //线程要执行的任务 + Thread thread = Thread.currentThread(); + System.out.println(thread.getName()+"线程在执行call方法"); + return 100; + } +} diff --git a/javaSE-day06/src/com/inmind/callable02/Demo01.java b/javaSE-day06/src/com/inmind/callable02/Demo01.java new file mode 100644 index 0000000..9ae66af --- /dev/null +++ b/javaSE-day06/src/com/inmind/callable02/Demo01.java @@ -0,0 +1,43 @@ +package com.inmind.callable02; + +import java.util.concurrent.ExecutionException; +import java.util.concurrent.FutureTask; + +/* +我们主线程是否可以获取子线程运行结束后的执行结果??? +使用继承Thread和实现Runnable都不行,要使用Callable,配合FutureTask类来启动线程 + + +FutureTask 是Runnable的实现类,FutureTask构造方法接收Callable对象, +通过FutureTask作为参数传给Thread,就可以将Callable接口实现类作为Thread的目标任务去执行 + +获取子线程的结果的使用步骤: +1.定义Callable的实现类 +2.创建FutureTask类对象,并以Callable的实现类作为参数 +3.创建线程对象,并以FutureTask类作为参数 +4.启动线程,在FutureTask对象中通过get方法获取子线程的结果 + */ +public class Demo01 { + public static void main(String[] args) { + //创建Callable的实现类 + CallableImpl callable = new CallableImpl(); + //创建FutureTask类对象 + FutureTask futureTask = new FutureTask<>(callable); + //创建线程对象,并以FutureTask类作为参数 + Thread thread = new Thread(futureTask,"子线程123"); + thread.start(); + + //在FutureTask对象中通过get方法获取子线程的结果 + Integer result = null; + try { + //阻塞方法,它会等着子线程执行结束,返回了结果之后才继续运行 + result = futureTask.get(); + } catch (Exception e) { + throw new RuntimeException(e); + } + System.out.println(result);//100 + + System.out.println("程序结束"); + + } +}