Exception+

导航

 

CountDowmLacth使用:

  他经常用于监听某些初始化的操作,等待初始化完毕后,通知主线程继续工作.(属于一个线程等待,等其它n线程发出通知)

CyclicBarrier的使用:

  使用场景:每个线程代表一个跑步运动员,当运动员都准备好后,才一起出发,只要有一个人没有准备好,大家都等待.(几个线程都是参与阻塞的,每个线程都准备好了,就会移除障碍,接着执行).

 Callable和Future使用:

  future模式非常适合在处理很耗时很长的业务逻辑时进行使用,可以有效的减少系统的响应时间,提高系统的吞吐量.

 

public class UserFuture implements Callable<String> {
    private String para;
    
    public UserFuture(String para){
        this.para = para;
    }
    /**
     * 这里是真实的业务逻辑,处理起来可能会比较慢
     */
    public String call() throws Exception {
        //模拟耗时
        Thread.sleep(5000);
        String result = this.para + "处理完成";
        return result;
    }
    //主控函数
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        String queryStr = "query";
        //构造futureTask 并且传入需要真正进行业务逻辑处理的类,该类一定是实现callable接口的类
        FutureTask<String> future1= new FutureTask<>(new UserFuture(queryStr));
        FutureTask<String> future2= new FutureTask<>(new UserFuture(queryStr));
        //创建一个固定线程的线程池且线程数为2
        ExecutorService threadPool = Executors.newFixedThreadPool(2);
        //这里提交任务future,则开启线程执行RealData的call方法的执行
        //submit 和 execute的区别 : 第一点是submit可以传入实现callable,runable接口的实例对象   第二点,submit方法有返回值
        Future submit1 = threadPool.submit(future1);   //单独启动一个线程去执行任务
        Future submit2 = threadPool.submit(future2);   //单独启动一个线程去执行任务
        System.out.println("请求完毕");
        
        //这里的submit1 submit2 可以判断这个单独的线程是否已经执行完成
        /*while(true){
             if(submit1.get() == null){
                 System.out.println("异步的任务已经执行完成");
                 break;
             }
        }*/
        try {
            //这里可以做额外的数据操作,也就是主程序执行其它的业务逻辑
            System.out.println("处理其它的业务逻辑....");
            Thread.sleep(1000);
            
        } catch (Exception e) {
            // TODO: handle exception
        }
        //调用获取数据的方法,如果call()方法没有执行完成呢,则会进行等待.
        System.out.println("数据:" + future1.get());
        System.out.println("数据:" + future2.get());
        
        threadPool.shutdown();
    }
}

 

posted on 2017-08-30 16:24  Exception+  阅读(387)  评论(0)    收藏  举报