導航:首頁 > 編程語言 > java等待線程結束

java等待線程結束

發布時間:2022-08-30 06:03:58

1. java多線程中,怎樣知道線程執行結束

在你的主線程中用一個join的方法,你要等待誰,就用誰調用,比如,你要等待線程a結束,就用a.join();這樣就可以了。記住哦,這條語句寫在哪個線程里,哪個線程就要等待調用這個方法的其他線程。就是說,你在主線程里寫了這條語句,那麼主線程就要等待線程a執行完後,主線程才會執行。

2. java中請問如何等待一個線程結束在運行其他的代碼

使用java的線程同步機制。
現在存在兩個線程a和b,偽代碼如下:
在a的代碼中:
b.start();//啟動b線程
synchronized(b) b.wait();//a線程中採用同步,並進行等待
c.execute();
在b線程結束時調用synchronized(this) notify();
這樣就可以達到b不結束,a線程就不會繼續執行c。

注釋:如果看不明白建議先學習一下java線程同步機制。

3. java如何等待方法內一個線程執行完畢

thread.Join把指定的線程加入到當前線程,可以將兩個交替執行的線程合並為順序執行的線程。比如在線程B中調用了線程A的Join()方法,直到線程A執行完畢後,才會繼續執行線程B。

4. Java主線程如何等待子線程執行結束

java.util.concurrent.CountDownLatch 這個類可以實現你所要的功能

例如:CountDownLatch latch = new CountDownLatch(5) //聲明計數器為5個
Thread t = new Thread() {
public void run() {
try {
//TODO 你的應用
} catch (Exception e) {
//TODO 異常處理
}
finally {
latch.countDown(); //這句是關鍵
System.out.println("ok"); //5個線程都跑完後輸出
}
}
};
t.start();
然後讓以上操作循環五次(就是說同時開5個線程),那麼這個"ok"就會在等到這5個線程都ok後才會被輸出一次。

5. java 如何實現等待子線程結束

有多種實現方式,下面列出兩種。

第一種:實現Callable類,使用有返回值的線程,只有線程執行完成後才會返回結果。

importjava.util.ArrayList;
importjava.util.List;
importjava.util.Random;
importjava.util.concurrent.*;

publicclassMain{
//初始化一個容量為10的線程池
=Executors.newFixedThreadPool(10);

publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
List<Future<String>>futures=newArrayList<>();
for(inti=0;i<3;i++){
MyThreadthread=newMyThread("線程"+i);
futures.add(pool.submit(thread));
}

for(Future<String>future:futures){
Stringname=future.get();
System.out.println(name+"執行完成...");
}
System.out.println("所有線程執行完成!");
}

}

<String>{

privateStringname;

publicMyThread(Stringname){
this.name=name;
}

@Override
publicStringcall()throwsException{
//TODO執行業務
//隨機延遲,模擬線程耗時
Thread.sleep(1000+newRandom().nextInt(2000));
returnname;
}
}

第二種:使用CountDownLatch實現線程計數,代碼如下:

importjava.util.Random;
importjava.util.concurrent.CountDownLatch;
importjava.util.concurrent.ExecutionException;
importjava.util.concurrent.ExecutorService;
importjava.util.concurrent.Executors;

publicclassMain2{
//初始化一個容量為10的線程池
=Executors.newFixedThreadPool(10);

publicstaticvoidmain(String[]args)throwsInterruptedException{
intthreadCount=3;
//初始化CountDownLatch,用於線程計數
CountDownLatchlatch=newCountDownLatch(threadCount);
for(inti=0;i<threadCount;i++){
MyThreadthread=newMyThread("線程"+i,latch);
pool.execute(thread);
}
//阻塞當前線程,CountDownLatch計數減為0時表示所有線程都執行完畢,才會釋放主線程的阻塞
latch.await();
System.out.println("所有線程執行完成!");
}

}

{

privateStringname;
privateCountDownLatchlatch;

publicMyThread(Stringname,CountDownLatchlatch){
this.name=name;
this.latch=latch;
}

@Override
publicvoidrun(){
//TODO執行業務
//隨機延遲,模擬線程耗時
try{
Thread.sleep(1000+newRandom().nextInt(2000));
}catch(InterruptedExceptione){
}
//計數減一
latch.countDown();
System.out.println(name+"執行完畢...");
}
}

6. Java如何等待子線程執行結束

先調用
shutdown
在調用
isTerminated
例:
/*
* 採用線程池開啟多個子線程,主線程等待所有的子線程執行完畢
*/
public static void moreThread() {
try {
int threadNum = 0;
for (int i = 0; i < 10; i++) {
threadNum++;

final int currentThreadNum = threadNum;
exe.execute(new Runnable() {

@Override
public void run() {
try {
System.out.println("子線程[" + currentThreadNum + "]開啟");
Thread.sleep(1000*10);
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
System.out.println("子線程[" + currentThreadNum + "]結束");
}
}
});
}

System.out.println("已經開啟所有的子線程");
exe.shutdown();
System.out.println("shutdown():啟動一次順序關閉,執行以前提交的任務,但不接受新任務。");
while(true){
if(exe.isTerminated()){
System.out.println("所有的子線程都結束了!");
break;
}
Thread.sleep(1000);
}

} catch (InterruptedException e) {
e.printStackTrace();
}finally{
System.out.println("主線程結束");
}
}

7. Java線程的幾種狀態

線程是一個動態執行的過程,它有一個從產生到死亡的過程,共五種狀態:

1、新建(new Thread)

當創建Thread類的一個實例(對象)時,此線程進入新建狀態(未被啟動)

例如:Thread t1=new Thread();

2、就緒(runnable)

線程已經被啟動,正在等待被分配給CPU時間片,也就是說此時線程正在就緒隊列中排隊等候得到CPU資源。例如:t1.start();

3、運行(running)

線程獲得CPU資源正在執行任務(run()方法),此時除非此線程自動放棄CPU資源或者有優先順序更高的線程進入,線程將一直運行到結束。

4、堵塞(blocked)

由於某種原因導致正在運行的線程讓出CPU並暫停自己的執行,即進入堵塞狀態。

5、死亡(dead)

當線程執行完畢或被其它線程殺死,線程就進入死亡狀態,這時線程不可能再進入就緒狀態等待執行。

8. java 如何判斷一個線程結束

線程結束時等待也就結束了
------解決方案--------------------------------------------------------
waitforsingleobject當然可以。
或者設一全局變數,線程結束就將其置為某值。在別處讀取該值,就可以判斷線程是否結束了。
------解決方案--------------------------------------------------------
wait_object_0
表示這個線程已經退出了,wait_timeout是這個線程在此函數返回時候還沒退出,但是設置的等待時間已經到了,wait_abandoned是所等待的對象是mutex而非thread,

9. 如何在JAVA中讓一個線程死亡或結束

當線程執行完畢或被其它線程殺死,線程就進入死亡狀態,這時線程不可能再進入就緒狀態等待執行。
線程進入死亡狀態的方法有兩種:
1、自然終止:正常運行run()方法後終止;
2、異常終止:調用stop()方法讓一個線程終止運行。
如下代碼:
public class ThreadDemo implements Runnable{
public void run() {
}
}
當run方法執行結束,即線程死亡(結束)。

10. java 中怎樣實現主線程等待其他線程執行完畢!!

在你的主線程中用一個JOIN的方法,你要等待誰,就用誰調用,比如,你要等待線程A結束,就用A.JOIN();這樣就可以了。記住哦,這條語句寫在哪個線程里,哪個線程就要等待調用這個方法的其他線程。就是說,你在主線程里寫了這條語句,那麼主線程就要等待線程A執行完後,主線程才會執行。

閱讀全文

與java等待線程結束相關的資料

熱點內容
路由器搭橋遠端伺服器地址是什麼 瀏覽:515
編譯動態庫時會連接依賴庫嗎 瀏覽:706
淘寶手機加密是隨機的嗎 瀏覽:672
解壓包子怎麼裝飾 瀏覽:585
四個數湊24演算法 瀏覽:676
哪一種不是vi編譯器的模式 瀏覽:168
xp在此處打開命令窗口 瀏覽:128
代碼編譯運行用什麼軟體 瀏覽:997
動態庫在程序編譯時會被連接到 瀏覽:760
python超簡單編程 瀏覽:259
獲取命令方 瀏覽:976
怎樣製作文件夾和圖片 瀏覽:60
調研編譯寫信息 瀏覽:861
python馮諾依曼 瀏覽:419
同時安裝多個app有什麼影響 瀏覽:254
奧術殺戮命令宏 瀏覽:184
用sdes加密明文字母e 瀏覽:361
單片機原理及應用試題 瀏覽:425
易語言開啟指定文件夾 瀏覽:40
馬思純參加密室大逃脫 瀏覽:322