java線程等待
Ⅰ 在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 所說,等待線程結束勢必要掛起當前線程,也就沒必要用線程了,也許需要重新考慮一下這種實現方式。