※ 引述《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