java条件执行方法_java 开启多线程里面如何加条件判断执行其他逻辑?
方法1:通過Thread類中的isAlive()方法判斷線程是否處于活動(dòng)狀態(tài)。
線程啟動(dòng)后,只要沒有運(yùn)行完畢,都會(huì)返回true。
【注】如果只是要等其他線程運(yùn)行結(jié)束之后再繼續(xù)操作,可以執(zhí)行t.join(),即:在t執(zhí)行完畢前掛起。
方法2:通過Thread.activeCount()方法判斷當(dāng)前線程的線程組中活動(dòng)線程的數(shù)目,為1時(shí)其他線程運(yùn)行完畢。
方法3:通過java.util.concurrent.Executors中的方法創(chuàng)建一個(gè)線程池,用這個(gè)線程池來啟動(dòng)線程。啟動(dòng)所有要啟動(dòng)的線程后,執(zhí)行線程池的shutdown()方法,即在所有線程執(zhí)行完畢后關(guān)閉線程池。然后通過線程池的isTerminated()方法,判斷線程池是否已經(jīng)關(guān)閉。線程池成功關(guān)閉,就意味著所有線程已經(jīng)運(yùn)行完畢了。
示例代碼:1?import?java.util.concurrent.ExecutorService;
2?import?java.util.concurrent.Executors;
3??4?public?class?Test?{
5????6?????public?static?void?main(String?args[])?throws?InterruptedException?{
7?????????ExecutorService?exe?=?Executors.newFixedThreadPool(50);
8?????????for?(int?i?=?1;?i?<=?5;?i++)?{
9?????????????exe.execute(new?SubThread(i));
10?????????}
11?????????exe.shutdown();
12?????????while?(true)?{
13?????????????if?(exe.isTerminated())?{
14?????????????????System.out.println("結(jié)束了!");
15?????????????????break;
16?????????????}
17?????????????Thread.sleep(200);
18?????????}
19?????}
20?}
一個(gè)思路:
?
給所有的線程加上同步(同一個(gè)鎖),主線程在啟動(dòng)其他所有線程后wait()。每個(gè)線程運(yùn)行結(jié)束后,執(zhí)行notify()方法。設(shè)定一個(gè)值為其他線程數(shù)量的int計(jì)數(shù)器count,寫一個(gè)while循環(huán),循環(huán)條件為count-->0,循環(huán)內(nèi)容為wait()。則所有線程運(yùn)行結(jié)束后正好while循環(huán)結(jié)束。
致命缺陷:如果幾個(gè)線程同時(shí)運(yùn)行結(jié)束,有可能在主線程還沒運(yùn)行時(shí),已經(jīng)執(zhí)行了好幾次notify()方法。如果這樣的話,while循環(huán)就永遠(yuǎn)不會(huì)結(jié)束了,主線程一直wait()下去。
總結(jié)
以上是生活随笔為你收集整理的java条件执行方法_java 开启多线程里面如何加条件判断执行其他逻辑?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 欧米茄表多少钱啊?
- 下一篇: java采集温湿度水浸_机房水浸传感器: