Java并发(七)异步执行任务之手写线程池、定时任务、CompletableFuture

本文介绍了Java并发编程中的关键概念,包括手写线程池、定时任务的Timer和TimerTask以及ScheduledExecutorService,以及CompletableFuture的异步处理。详细分析了Timer的基本原理和陷阱,指出了ScheduledExecutorService的优势和实现机制。同时,讨论了CompletableFuture的使用和线程池的选择策略,强调了避免线程饥饿和任务干扰的重要性。
摘要由CSDN通过智能技术生成

手写

表示子任务:

public interface Callable<V> {
   
    V call() throws Exception;
}

表示异步调用的结果:

public interface MyFuture <V> {
   
    V get() throws Exception ;//返回真正的结果,如果结果还没有计算完成,get会阻塞直到计算完成,如果调用过程发生异常,则get方法抛出调用过程中的异常
}

类MyExecutor:

public class MyExecutor{
   
    //这个子线程执行实际的子任务,记录执行结果到result变量、异常到exception变量;
    //执行结束后设置共享状态变量done为true,并调用notifyAll以唤醒可能在等待结果的主线程
    static class ExecuteThread<V> extends Thread {
   
        private V result = null;
        private Exception exception = null;
        private boolean done = false;
        private Callable<V> task;
        private Object lock;

        public ExecuteThread(Callable<V> task, Object lock) {
   
            this.task = task;
            this.lock = lock;
        }

        @Override
        public void run() {
   
            try {
   
                result = task.call();
            } catch (Exception e) {
   
                exception = e;
            } finally {
   
                synchronized (lock) {
   
                    done = true;
                    lock.notifyAll();
                }
            }
        }

        public V getResult() {
   
            return result;
        }

        public boolean isDone() {
   
            return done;
        }

        public Exception getException() {
   
            return exception;
        }
    }
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值