java获取异步线程执行结果示例,也是Executors框架的基本原理
2023-09-11 14:22:24 时间
人狠话不多,直接上代码,代码拷贝到本地直接运行,自己研究吧。
public interface MyFuture<V> { V get() throws Exception; }
public interface Callback<v> { v call() throws Exception; }
public class ExecuteThread<V> extends Thread { private V result=null; private Exception exception=null; private boolean done=false; private Callback<V> task; private Object lock; public ExecuteThread(Callback<V> task, Object lock) { this.task = task; this.lock = lock; } @Override public void run() { try { result=task.call(); } catch (Exception e) { //e.printStackTrace(); exception=e; }finally { synchronized (lock){ done=true; lock.notifyAll(); } } } public V getResult() { return result; } public Exception getException() { return exception; } public boolean isDone() { return done; } }
public class MyExecutor<V> { public <V> MyFuture<V> execute(final Callback<V> task){ final Object lock=new Object(); final ExecuteThread<V> thread=new ExecuteThread<>(task,lock); thread.start(); MyFuture<V> future=new MyFuture<V>() { @Override public V get() throws Exception { synchronized (lock){ while (!thread.isDone()){ lock.wait(); } } if(thread.getException()!=null){ throw thread.getException(); } return thread.getResult(); } }; return future; } }
主线程代码:
import java.util.Random; public class Main { public static void main(String[] args) throws Exception { MyExecutor executor=new MyExecutor(); Callback<Integer> subTask=new Callback<Integer>() { @Override public Integer call() throws Exception { Random rdm=new Random(); int millis=rdm.nextInt(1000); Thread.sleep(millis); return millis; } }; MyFuture<Integer> future=executor.execute(subTask); Integer result=future.get(); System.out.println(result); } }
代码枯燥难懂,但是我有什么办法呢?
只能自己慢慢研究了。
相关文章
- 使用axis2,根据WSDL生成java客户端代码
- java中线程存活和线程执行的问题!
- Java实现 LeetCode 498 对角线遍历
- java实现纵横火柴棋
- java实现第八届蓝桥杯平方十位数
- Java实现 泊松分酒
- Java实现 蓝桥杯 历届试题 网络寻路
- Java实现 蓝桥杯 算法训练 数字三角形
- Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
- 蓝桥杯(Java方法、详细解法分析)基础练习 阶乘计算
- java核心知识点学习----并发和并行的区别,进程和线程的区别,如何创建线程和线程的四种状态,什么是线程计时器
- 如何停止一个正在运行的java线程
- Java线程监控及中断
- Java多线程--让主线程等待所有子线程执行完毕
- 可能java设计缺陷、希望高手指正错误
- Java线程池--拒绝策略RejectedExecutionHandler
- 浅析Java各种变量线程安全问题
- Java多线程——<五>后台线程(daemon)
- Java SimpleDateFormat 线程不安全问题及解决方法
- Atitit zip解压文件 java use apache ant.jar C:0wkspchislogsrcmainjavacomattilaxcompressZipUt
- 华为OD机试 - 无向图染色(Java & JS & Python)
- 【项目实战】Java自带的定时任务框架 —— JDK Timer和TimerTask
- 【java】Java教程
- Java中String类的concat方法___java的String字符串的concat()方法连接字符串和“+“连接字符串解释
- 【腾讯阿里最全面试题】Java 线程池的实现原理,ThreadPoolExecutor关键参数解释...
- java三种匿名的方式开启线程
- Java并发编程:如何创建线程?
- java thread 线程40个问题汇总
- Java创建并执行线程的四种方法