实现自定义线程池(ExecutorService/Callable)
2021-03-02 21:40:59   0  举报             
     
         
 AI智能生成
  自定义线程池(ExecutorService/Callable)
    作者其他创作
 大纲/内容
  阅读导航    
     线程 👉  
     CPU+JMM 👉  
     CAS+Volatile 👉  
     Synchronized 👉  
     JUC    
     locks锁+atomic原子类 👉  
     executor自定义线程池  
     collections并发容器 👉  
     tools并发工具类 👉  
     线程池 👉  
     ThreadLocal 👉
  
     executor    
     Future    
     RunnableFuture    
     FutureTask    
     启动和取消运算  
     查询运算是否完成  
     取回运算结果  
     SwingWorker  
     CompletableFuture    
     supplyAsync():用来开启一个异步任务(有返回值)  
     thenCompose():当第一个任务完成时才会执行第二个任务,开启新线程,最终结果由第二个任务返回  
     thenCombine():两个异步任务全部完成时才会执行某些操作,用来合并两个任务,结果由BiFunction()函数返回  
     ScheduledFuture  
     Callable    
     Callable接口类似于Runnable,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后可以返回值,这个
返回值可以被Future拿到,也就是说Future可以拿到异步执行任务的返回值
    返回值可以被Future拿到,也就是说Future可以拿到异步执行任务的返回值
 实现Callable接口    
     重写call方法,有返回值,可抛异常  
     需要用FutureTask在外部封装一下再传递给
Thread,FutureTask就是Runnable的实现类
    Thread,FutureTask就是Runnable的实现类
 FutureTask使用场景?    
     两件事或多件事同时完成  
     FutureTask两个个构造函数?    
     第一个构造函数要求传入Callable对象  
     第二个构造函数要求传入Runnable对象和返回值类型  
     FutureTask的其他方法?    
     get()    
     会一直等待子线程运行结束  
     get(5,TimeUnit.SECOND)    
     传入等待时间,超时后会抛出TimeoutException异常,需要捕捉处理  
     isDone()    
     询问子线程是否执行完成,返回值是boolean  
     优点    
     在主线程中可获取到子线程的返回值    
     直接调用FutureTask对象的get()方法  
     为什么可以获取到?如何获取的?  
     在主线程中可获取到子线程发生的异常    
     通过getCause()方法获取子线程的异常  
     代码实现  
     Executor
    
     ExecutorService
    
     AbstractExecutorService
    
     ThreadPoolExecutor  
     ScheduledExecutorService    
     ScheduledThreadPoolExecutor  
     RejectedExecutionHandler
拒绝策略
    拒绝策略
 ThreadPoolExecutor.AbortPolicy  
     ThreadPoolExecutor.CallerRunsPolicy  
     ThreadPoolExecutor.DiscardOldestPolicy  
     ThreadPoolExecutor.DiscardPolicy  
     execute() 和 submit() 的区别?    
     execute()是Executor接口中的方法,submit()是ExecutorService中的方法  
     submit()方法中调用了execute()方法,增加了FutureTask返回值  
     关于作者    
     我的博客 👉  
     微信公众号 👉  
     GitHub 导航 👉  
     ProcessOn 主页 👉  
    
 
 
 
 
  0 条评论
 下一页
 为你推荐
 查看更多
    
   
   
   
   
   
  
  
  
  
  
  
  
  
  
  
 