作者nf7series (真呆)
看板java
标题Re: [J2SE] Thread的执行
时间Thu Apr 3 21:39:55 2008
※ 引述《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