⑴ java 線程 join方法
你採納的答來案第一句話就是錯誤的自.
join方法是 誰調用暫停誰
你的那道考試題,答案B,當另一個線程Join方法被調用時,停的是另一個線程,所以不會影響 本線程的運行狀態。
按照他的解釋 main都等待thread-0了,已經改變了main的狀態, 還選B?
⑵ java中join( )和yield方法有什麼區別和聯系
yield:理論上,yield意味著放手,放棄,投降。一個調用yield()方法的線程告訴虛擬機它樂意讓其他線程佔用自己的位置。這表明該線程沒有在做一些緊急的事情。注意,這僅是一個暗示,並不能保證不會產生任何影響。注意:它是一個靜態的原生(native)方法;它告訴當前正在執行的線程把運行機會交給線程池中擁有相同優先順序的線程;
它不能保證使得當前正在運行的線程迅速轉換到可運行的狀態;它僅能使一個線程從運行狀態轉到可運行狀態,而不是等待或阻塞狀態。
join:線程實例的方法join()方法可以使得一個線程在另一個線程結束後再執行。如果join()方法在一個線程實例上調用,當前運行著的線程將阻塞直到這個線程實例完成了執行。
packagetest;
publicclassYieldExample{
publicstaticvoidmain(String[]args){
Threadprocer=newProcer();
Threadconsumer=newConsumer();
procer.setPriority(Thread.MIN_PRIORITY);
consumer.setPriority(Thread.MAX_PRIORITY);
procer.start();
consumer.start();
}
}
classProcerextendsThread{
publicvoidrun(){
for(inti=0;i<5;i++){
System.out.println("IamProcer:ProcedItem"+i);
Thread.yield();
}
}
}
classConsumerextendsThread{
publicvoidrun(){
for(inti=0;i<5;i++){
System.out.println("IamConsumer:ConsumedItem"+i);
Thread.yield();
}
}
}
packagetest;
publicclassJoinExample{
publicstaticvoidmain(String[]args)throwsInterruptedException{
Threadt=newThread(newRunnable(){
publicvoidrun(){
System.out.println("Firsttaskstarted");
System.out.println("Sleepingfor2seconds");
try
{
Thread.sleep(2000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println("Firsttaskcompleted");
}
});
Threadt1=newThread(newRunnable(){
publicvoidrun(){
System.out.println("Secondtaskcompleted");
}
});
t.start();
t.join();
t1.start();
}
}
⑶ java thread中的join函數什麼意思
例如在B線程執行的代碼中調用A.join()
則表示B線程暫時停止執行,去執行A線程的任務,直到A線程的任務完成後,B線程再開始執行
⑷ Java中如果一個線程執行了join之後,被等待了,那麼主函數還會執行嗎
主函數也是一個線程(主線程) 如果你join的位置在主函數裡面那掘配如賣纖么判啟理論上是會等那個線程運行完畢才繼續往下走