zoukankan      html  css  js  c++  java
  • 关于线程池的线程复用

    之前接触到线程池之后,对线程复用很感兴趣。但是,线程执行完后就会销毁,那么线程的复用又是如何实现的呢?

    最近在网上找了一下相关资料,发现了一篇文章讲解的比较浅显易懂,根据该文章的思路,自己自由发挥了一下,估计大概应该就是这么个意思吧。

    BlockingQueue<Runnable> runnableQueue = new ArrayBlockingQueue<Runnable>(100);
            Runnable target = new Runnable() {
                @Override
                public void run() {
                    for (;;) {
                        if (!runnableQueue.isEmpty()) {
                            Runnable runnable = runnableQueue.poll();
                            if (runnableQueue != null) {
                                runnable.run();
                            }
                        }
                    }
                }
            };
            Thread thread = new Thread(target);
            runnableQueue.put(new Runnable() {
                @Override
                public void run() {
                    System.out.println("first");
                }
            });
    
            runnableQueue.put(new Runnable() {
                @Override
                public void run() {
                    System.out.println("second");
                }
            });
    
            thread.start();
    
            runnableQueue.put(new Runnable() {
                @Override
                public void run() {
                    System.out.println("third");
                }
            });

    Runnable被提交进任务队列中,线程反复检测队列中是否有可执行任务,若有则执行出队操作,并在自己的run方法中调用任务的run方法。

  • 相关阅读:
    错因集锦
    组合数学12
    硬币购物
    考试套路整理
    考前模板整理
    我的友链
    P4127 [AHOI2009]同类分布
    P1836 数页码_NOI导刊2011提高(04)
    P4124 [CQOI2016]手机号码
    数位DP小结
  • 原文地址:https://www.cnblogs.com/wxdmw/p/14023031.html
Copyright © 2011-2022 走看看