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

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

為什么在靜態(tài)初始化程序中使用lambda進(jìn)行并行流會(huì)導(dǎo)致死鎖?

為什么在靜態(tài)初始化程序中使用lambda進(jìn)行并行流會(huì)導(dǎo)致死鎖?

Qyouu 2019-11-27 14:22:12
我遇到了一個(gè)奇怪的情況,在靜態(tài)初始化程序中使用帶有l(wèi)ambda的并行流似乎永遠(yuǎn)沒有CPU使用率。這是代碼:class Deadlock {    static {        IntStream.range(0, 10000).parallel().map(i -> i).count();        System.out.println("done");    }    public static void main(final String[] args) {}}這似乎是此行為的最小再現(xiàn)測(cè)試用例。如果我:將塊放入main方法而不是靜態(tài)初始化器中,刪除并行化,或刪除lambda,代碼立即完成。誰能解釋這種行為?它是錯(cuò)誤還是故意的?我正在使用1.8.0_66-內(nèi)部的OpenJDK版本。
查看完整描述

3 回答

?
手掌心

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

對(duì)于那些想知道其他線程在哪里引用Deadlock該類本身的人來說,Java lambda的行為就像您這樣寫:


public class Deadlock {

    public static int lambda1(int i) {

        return i;

    }

    static {

        IntStream.range(0, 10000).parallel().map(new IntUnaryOperator() {

            @Override

            public int applyAsInt(int operand) {

                return lambda1(operand);

            }

        }).count();

        System.out.println("done");

    }

    public static void main(final String[] args) {}

}

對(duì)于常規(guī)的匿名類,沒有死鎖:


public class Deadlock {

    static {

        IntStream.range(0, 10000).parallel().map(new IntUnaryOperator() {

            @Override

            public int applyAsInt(int operand) {

                return operand;

            }

        }).count();

        System.out.println("done");

    }

    public static void main(final String[] args) {}

}


查看完整回答
反對(duì) 回復(fù) 2019-11-27
  • 3 回答
  • 0 關(guān)注
  • 778 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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