第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Fork/Join 上下文中的 Phaser 與 CyclicBarrier

Fork/Join 上下文中的 Phaser 與 CyclicBarrier

胡說(shuō)叔叔 2023-04-26 16:06:25
在嘗試了解 Phaser 和 CyclicBarrier 之間的區(qū)別時(shí),我遇到了一些鏈接 Difference between Phaser and CyclicBarrier和 https://www.infoq.com/news/2008/07/phasers/ 我讀到 Phaser 與 Fork/ 兼容Join 接口,而 CyclicBarrier 沒(méi)有,這里有一段代碼來(lái)演示這一點(diǎn):移相器 public static void main(String[] args) throws InterruptedException {        CountDownLatch countDownLatch = new CountDownLatch(1);        Phaser phaser = new Phaser(16){            @Override            protected boolean onAdvance(int phase, int registeredParties) {                return phase ==1 || super.onAdvance(phase, registeredParties);            }        };        System.out.println("Available Processors: "+Runtime.getRuntime().availableProcessors());        ExecutorService executorService = ForkJoinPool.commonPool(); // Runtime.getRuntime().availableProcessors() -1        for (int i = 0; i < 16; i++) {            final int count = 0;            executorService.submit(() -> {                while (!phaser.isTerminated()) {                    try {                        Thread.sleep(ThreadLocalRandom.current().nextInt(300, 2000));                        System.out.println(Thread.currentThread().getName() + count + " ... ");                        phaser.arriveAndAwaitAdvance();                        System.out.println(Thread.currentThread().getName() + count + " ... continues ... ");                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }                countDownLatch.countDown();            });        }        countDownLatch.await();    }問(wèn)題:fork/join 如何通過(guò) Phaser 而不是通過(guò) CyclicBarrier 設(shè)法創(chuàng)建更多線程?為什么這些方法arriveAndAwaitAdvance()使線程池創(chuàng)建新線程,以及如何,但方法await()沒(méi)有導(dǎo)致線程池創(chuàng)建更多線程?
查看完整描述

1 回答

?
白豬掌柜的

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊

Phaser 之所以能夠做到這一點(diǎn),是因?yàn)樗麱orkJoinPool.managedBlock(ManagedBlocker)在阻塞線程時(shí)會(huì)在內(nèi)部調(diào)用。


任何人都可以訪問(wèn) ForkJoinPool 的這個(gè) API,因此您可以輕松地增強(qiáng)您的CyclicBarrier版本以使用它,并消除線程饑餓。例如,帶有以下氛圍的東西:


ForkJoinPool.managedBlock(new ManagedBlocker() {


    boolean isReleasable = false;


    @Override

    public boolean block() throws InterruptedException {

        try {

            cyclicBarrier.await();

        } catch (BrokenBarrierException aE) {

            throw new IllegalStateException(aE);

        }

        return isReleasable = true;

    }


    @Override

    public boolean isReleasable() {

        return isReleasable;

    }

});


查看完整回答
反對(duì) 回復(fù) 2023-04-26
  • 1 回答
  • 0 關(guān)注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)