zoukankan      html  css  js  c++  java
  • java多线程异步执行

    import java.util.concurrent.Callable;  
    import java.util.concurrent.ExecutionException;  
    import java.util.concurrent.ExecutorService;  
    import java.util.concurrent.Executors;  
    import java.util.concurrent.Future;  
      
    public class TestMain {  
      
        public static void main(String[] args) {  
      
            //实现一个Callable接口  
            Callable<Netty> c = new Callable<Netty>() {  
                @Override  
                public Netty call() throws Exception {  
                      
                    //这里是你的业务逻辑处理  
                      
                    //让当前线程阻塞5秒看下效果  
                    System.out.println("---sleep开始---");  
                    Thread.sleep(5000);  
                    System.out.println("---sleep结束---");  
                    return new Netty("张三");  
                }  
            };  
      
            System.out.println("---主线程不被阻塞,继续往下走---");  
            
            /*Java通过Executors提供四种线程池,分别为:
            newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
            newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
            newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
            newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。*/
            ExecutorService es = Executors.newCachedThreadPool();  
              
            //记得要用submit,执行Callable对象  
            Future<Netty> fn = es.submit(c);  
              
            //无限循环等待任务处理完毕  如果已经处理完毕 isDone返回true  
            while (!fn.isDone()) {  
                try {  
                    //处理完毕后返回的结果  
                    Netty nt = fn.get();  
                    System.out.println("处理完毕后返回的结果:" + nt.name);  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                } catch (ExecutionException e) {  
                    e.printStackTrace();  
                }  
            }  
            
            if (fn.isDone()) {
                System.out.println("关闭");  
                es.shutdown();
            }
            System.out.println("全部运行结束");  
        }  
      
        static class Netty {  
            private Netty(String name) {  
                this.name = name;  
            }  
      
            private String name;  
        }  
        
    }  
  • 相关阅读:
    人生如此
    微软十七道智力面试题及答案
    【Flink系列十】Flink作业提交过程的调试和诊断
    【Flink系列九】Flink 作业提交遇到的问题记录以及原理
    Jackson ObjectMapper JSON序列化工具使用笔记,由浅入深
    既有设计模式的lambda重构
    观察者模式/Observer
    函数式接口java.util.function
    面向对象世界的七个设计原则
    重构-改善既有代码设计读后灵光
  • 原文地址:https://www.cnblogs.com/shihaiming/p/7300330.html
Copyright © 2011-2022 走看看