• 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;  
        }  
        
    }  
  • 相关阅读:
    tcpdump抓包
    openldap quick start guide
    深入理解PHP内核(六)函数的定义、传参及返回值
    深入理解PHP内核(五)函数的内部结构
    mongodb 关系、引用、覆盖索引查询
    mongodb php
    mongodb-$type、limit、skip、sort方法、索引、聚合
    mongodb简介与增删该查
    深入理解PHP内核(四)概览-PHP脚本的执行
    深入理解PHP内核(三)概览-SAPI概述
  • 原文地址:https://www.cnblogs.com/shihaiming/p/7300330.html
Copyright © 2020-2023  润新知