zoukankan      html  css  js  c++  java
  • WorkStealingPool

    /**
     * WorkStealingPool
     * 工作窃取线程池
     * 
     * 假设共有三个线程同时执行, A, B, C
     * 当A,B线程池尚未处理任务结束,而C已经处理完毕,则C线程会从A或者B中窃取任务执行,这就叫工作窃取
     * 假如A线程中的队列里面分配了5个任务,而B线程的队列中分配了1个任务,当B线程执行完任务后,它会主动的去A线程中窃取其他的任务进行执行
     * WorkStealingPool 背后是使用 ForkJoinPool实现的
     */
    public class T11_WorkStealingPool {
    
        public static void main(String[] args) throws IOException {
            // CPU 核数
            System.out.println(Runtime.getRuntime().availableProcessors());
            
            // workStealingPool 会自动启动cpu核数个线程去执行任务
            ExecutorService service = Executors.newWorkStealingPool();
            service.execute(new R(10000));  // 我的cpu核数为12 启动13个线程,其中第一个是1s执行完毕,其余都是2s执行完毕,
                                                    // 有一个任务会进行等待,当第一个执行完毕后,会再次偷取第十三个任务执行
            for (int i = 0; i < Runtime.getRuntime().availableProcessors(); i++) {
                service.execute(new R(2000));
            }
            
            // 因为work stealing 是deamon线程,即后台线程,精灵线程,守护线程
            // 所以当main方法结束时, 此方法虽然还在后台运行,但是无输出
            // 可以通过对主线程阻塞解决
            System.in.read();
        }
        
        static class R implements Runnable {
    
            int time;
    
            R(int time) {
                this.time = time;
            }
    
            @Override
            public void run() {
                try {
                    TimeUnit.MILLISECONDS.sleep(time);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName() + "  " + time);
            }
        }
    }
  • 相关阅读:
    Appium元素定位方式
    Selenium和Appium的关系
    再生龙备份恢复
    删除CentOS更新后的旧内核
    文字识别网站https://ocr.space/
    kubeasz部署高可用kubernetes1.17.2 并实现traefik2.1.2部署 亲测可用
    docker之Dockerfile实践用dockerfile构建nginx环境
    WordPress如何设置先登录再进入主页
    docker 容器使用 systemctl 命令是报错
    bilibili
  • 原文地址:https://www.cnblogs.com/gxlaqj/p/11719681.html
Copyright © 2011-2022 走看看