當前位置:首頁 » 編程語言 » java線程等待

java線程等待

發布時間: 2022-04-18 05:59:22

Ⅰ 在java中同時起多個線程,然後怎麼讓多個線程進入等待狀態

class MyThread extends Thread {
static Object lock = new Object();
public void run() {
// TODO Auto-generated method stub

}
public void toWait() {
synchronized(lock){
try {
lock.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void toNotifyAll(){
synchronized(lock){
lock.notifyAll();
}
}
}
//讓線程對象在run方法中調用toWait使其等待,調用靜態方法toNotifyAll喚醒所有線程

Ⅱ java中的join是如何讓主線程等待的

join就是阻塞調用線程,直到該線程結束後,調用線程才能繼續執行。
該影響只存在於執行join方法的線程和調用該線程的線程之間
如在t1線程中調用t2.join(),則需要t2線程執行完後t1方能繼續執行

Ⅲ 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("主線程結束");
}
}

Ⅳ java 中有兩個線程怎樣等待一個線程執行完畢

這個可以有2種解決方案,notify,wait實現 以及CountDownLatch,
我貼一個CountDownLatch的實現

public class Test4 {

class DTask implements Runnable
{
private CountDownLatch downLatch;

private String name;

public DTask(CountDownLatch downLatch,String name)
{
this.downLatch =downLatch;
this.name =name;
}

public void run()
{
if(name.equals("A"))
try {
this.downLatch.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+"====>"+i);
}

//if(name.equals("B"))
this.downLatch.countDown();
}

}

public static void test1()
{
ExecutorService service =Executors.newFixedThreadPool(2);
Object obj =new Object();
Test4 tt =new Test4();
CountDownLatch downLatch = new CountDownLatch(1);
service.execute(tt.new DTask(downLatch,"A") );
service.execute(tt.new DTask(downLatch,"B") );
service.shutdown();

}

public static void main(String[] args)
{
test1();

}

}

Ⅳ 這段java 多線程代碼為什麼id是1的線程一直在等待

從代碼來看,每個線程的o都不是同一個。1線程的o.wait()後,只執行了2線程的o.notifyAll()。所以1線程會一直處於等待中。如果要達到你的要求,修改構造函數,去掉o = new Object();這句。因為這句會在每次初始化一個新線程時,改變o的指向。

Ⅵ java callable 怎麼讓主線程等待

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

Ⅶ java 線程為什麼會排隊等待

主要是有共享資源的時候,防止兩個以上的線程同時修改,最後結果出錯,所以只能讓一個線程得到鎖,其他線程等待

Ⅷ java 中當一線程處於等待狀態時,用什麼方法可以將其喚醒

如果線程在睡覺,調用這個線程對象的interrupt方法
如果這個線程在等待一個對象的鎖,那麼調用那個對象的notifyAll方法

Ⅸ java多線程相互等待

1、存在處以業務邏輯類,存在map,初始化。
2、存在線程池 最大200,ThreadFactory可以默認
3、單線程處理ip的類,構造方法包含是需參數Map,
4、外部循環 調用線程池,生成線程 傳參 map 和當前循環次數
5、線程處理完ip後,將外部傳來的循環次數做key,結果做value插入map,喚醒主線程判斷map中的數量是否==需處理的ip的數量,選擇跳出或繼續等待。

Ⅹ 等待線程,java問題,怎麼解決

簡單地可以使用 Thread.join() 方法來等待線程結束,例如這樣修改一下:

Thread t = new Thread() { // 同原來的 run()};t.start(); // 調用這個方法,會掛起當前線程直至線程t結束t.join();

join()方法的文檔是這么寫的: Waits for this thread to die.
也可以用wait/notify或mutex等機制來對兩個線程進行同步,稍微復雜一點,例如使用 wait/notify:

new Thread() { public void run() { // 同原來的代碼,加上以下代碼用於同步 synchronized (results) { results.notifyAll(); } }}.start(); // 通過以下代碼掛起當前線程,等待其他線程通知synchronized (results) { results.wait();}

以供參考。
同 i178269245 所說,等待線程結束勢必要掛起當前線程,也就沒必要用線程了,也許需要重新考慮一下這種實現方式。

熱點內容
微信青少年模式獨立密碼是什麼 發布:2025-01-22 16:52:06 瀏覽:587
騰訊雲伺服器怎麼購買 發布:2025-01-22 16:45:01 瀏覽:628
天貓怎麼上傳視頻 發布:2025-01-22 16:40:02 瀏覽:725
安卓如何把抖音評論換成黑色 發布:2025-01-22 16:30:57 瀏覽:700
連接池Java 發布:2025-01-22 16:28:27 瀏覽:258
搶杠演算法 發布:2025-01-22 16:15:02 瀏覽:72
圖片伺服器ftp 發布:2025-01-22 15:52:33 瀏覽:507
sql打開bak文件 發布:2025-01-22 15:47:32 瀏覽:107
opengl伺服器源碼 發布:2025-01-22 15:40:02 瀏覽:909
python部署服務 發布:2025-01-22 15:38:46 瀏覽:283