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

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

在同一個(gè)線程中創(chuàng)建多個(gè)定時(shí)器導(dǎo)致主線程滯后

在同一個(gè)線程中創(chuàng)建多個(gè)定時(shí)器導(dǎo)致主線程滯后

慕尼黑的夜晚無繁華 2023-06-21 15:03:11
我正在嘗試運(yùn)行一些代碼,這些代碼將在 100 毫秒后啟用變量,再等待 100 毫秒,然后禁用它我嘗試使用 2 個(gè)計(jì)時(shí)器,并創(chuàng)建一個(gè)新線程并將其休眠。這兩種解決方案都會(huì)導(dǎo)致主線程掛起一秒鐘左右。我用于計(jì)時(shí)器的代碼:                new java.util.Timer().schedule(                        new java.util.TimerTask() {                            @Override                            public void run() {                                PlayerControl.MoveForward = false;                            }                        },                        100                );                new java.util.Timer().schedule(                        new java.util.TimerTask() {                            @Override                            public void run() {                                PlayerControl.MoveForward = true;                            }                        },                        200                );對(duì)于線程方法:new Thread(() -> {    Thread.sleep(100);    PlayerControl.MoveForward = false;    Thread.sleep(100);    PlayerControl.MoveForward = true;})我期望這兩個(gè)結(jié)果都等待 100 毫秒,將變量設(shè)置為 false,等待 100 毫秒,然后再次將其設(shè)置為 true,對(duì)過程的其余部分沒有影響。為什么會(huì)發(fā)生這種情況,我應(yīng)該怎么做?
查看完整描述

2 回答

?
翻過高山走不出你

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

直到所有非守護(hù)線程都完成,主線程才會(huì)退出。


您可以通過執(zhí)行以下操作使計(jì)時(shí)器線程成為守護(hù)進(jìn)程:


            new java.util.Timer(true).schedule(

                    new java.util.TimerTask() {

                        @Override

                        public void run() {

                            PlayerControl.MoveForward = false;

                        }

                    },

                    100

            );

對(duì)于普通線程,可以這樣做:


Thread thread = new Thread(() -> {

    ...

});

thread.setDaemon(true);

thread.start();


查看完整回答
反對(duì) 回復(fù) 2023-06-21
?
明月笑刀無情

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

就對(duì)方法的最少修改而言,類似這樣的方法可能會(huì)起作用:


new Thread(() -> {

    Thread.sleep(100);

    PlayerControl.MoveForward = false;

    Thread.sleep(100);

    PlayerControl.MoveForward = true;

}).start();

如果您希望它永遠(yuǎn)運(yùn)行,只需執(zhí)行以下操作:


new Thread(() -> {

    for(;;) {

        Thread.sleep(100);

        PlayerControl.MoveForward = false;

        Thread.sleep(100);

        PlayerControl.MoveForward = true;

    }

}).start();

如果要限制迭代次數(shù),只需更改for循環(huán)內(nèi)的條件即可。


您的線程方法沒有改變?nèi)魏蝺?nèi)容的原因是您從未啟動(dòng)該線程。至于為什么你的主線程掛起,這可能與你沒有在此處發(fā)布的代碼有關(guān)。


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

添加回答

舉報(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)