看板 java 關於我們 聯絡資訊
※ 引述《H45 (!H45)》之銘言: : ※ 引述《nf7series (真呆)》之銘言: : : 問個Thread執行的問題: : : public class ThreadTest extends Thread : : { : : public void run() : : { : : for(int i=0;i<11;i++) : : { : : System.out.println(getName()+":"+i); : : } : : } : : public static void main(String[] args) throws Exception : : { : : ThreadTest t1=new ThreadTest(); : : ThreadTest t2=new ThreadTest(); : : t1.start(); : : t2.start(); : : //t1.join(); : : //Thread.sleep(1000); : : for(int i=0;i<11;i++) : : { : : System.out.println("Main Thread"+":"+i); : : } : : } : : } : : 以上的code,有兩個建立出來的thread t1,t2和一個Main thread,各自都會印出0~10, : : 我剛測試,若code裡面有用t1.join(),則t1一定會先跑完,才會再跑Main thread,但 : : t1和t2仍是競爭的,沒有說誰會比誰先執行完。 : : 所以我是否可說join是用來確保thread會比Main thread先執行完的一種方法? : join 是等待另一個 thread 執行完。 不好意思,我看JavaDoc寫join是Waits for this thread to die. 再對照您寫的解釋,還是看不太懂,如果以上面的例子, t1.join()是哪個thread要等待哪個thread執行完呢? : : 另外,若我在程式中加入sleep()的方法,t1.sleep()、t2.sleep()、Thread.sleep()和 : : sleep() <----沒指定哪個thread,各是讓哪個Thread休息呢?哪個thread呼叫sleep就是 : : 讓它自己休息嗎?或是不管誰呼叫sleep都是讓目前正在執行的thread休息? : sleep 是讓呼叫者睡著,你會發現它是靜態成員方法 (static member method) 我看javaworld的討論裡,有說到因為sleep是static method,所以若以上面的例子, 不論是t1.sleep()、t2.sleep()或Thread.sleep()都是一樣的,因為static就不用管 是哪個instance,是因為這是在Main thread的程式碼裡面呼叫的,所以是讓Main thread休息嗎? : : 先謝謝了~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.73.98.71