10. public class Starter extends Thread {
11. private int x= 2;
12. public static void main(String[] args) throws Exception {
13. new Starter().makeItSo();
14. }
15. public Starter() {
16. x=5;
17. start();
18. }
19. public void makeItSo() throws Exception {
20. join();
21. x=x- 1;
22. System.out.println(x);
23. }
24. public void run() { x *= 2; }
25. }这个类执行的结果是什么呢?书上说是9,但觉得好像应该是不能确定才对,求高手解释一下吧

解决方案 »

  1.   

    就是9
    注意public void makeItSo() throws Exception {
    20. join();
    21. x=x- 1;
    22. System.out.println(x);
    23. } 
    这个方法是主线程执行的.创建的线程中run()方法内的内容才是新创建的线程负责执行.
      

  2.   

    new Starter().makeItSo(); 
    在构造方法中启动一个新的线程,它一旦开始就去执行run中的x *= 2;
    主线程中调用makeItSo(); 
    注意join是Starter的,会等待这个新线程结束,结束后x=10.
    x=x-1;
    x=9
      

  3.   


    问下这个join是谁加在了谁后面啊?
      

  4.   

    join的作用等待run方法中的x *= 2;执行完才继续执行x=x- 1; System.out.println(x);楼主可以试试把join()去掉,在我的机器上输出为4,因为此时还没来得及执行x *= 2;就执行x=x- 1; System.out.println(x);了 
      

  5.   

    书上是这么说的:
        Thread t = new Thread();
        t.start();
        t.join();
        //t.join()意味着:将当前线程加入到t的结束,即在当前线程再次运行之前线程t已经完成
    那么, makeItSo()方法中的join()即是this.join();那是什么意思,该怎么解释呢?