回错贴了?
我的问题是 在线程testThread启动后,为什么主线程更新基本类型和String(t1和s1)在线程运行时能实时传递,但list之类的对象就不行。

解决方案 »

  1.   

    我记得线程启动后会生成一个工作内存,存放主内存的变量的一份拷贝,为什么t1和s1还能实时更新到线程中呢?
    t1,s1不是局部变量,更新是肯定的,只是时机的问题。一般遇到sysnchronized同步时,会进行更新。System.out.println中就有synchronized块,所以你在输出的时候会进行更新。
      

  2.   

    回错贴了?
    我的问题是 在线程testThread启动后,为什么主线程更新基本类型和String(t1和s1)在线程运行时能实时传递,但list之类的对象就不行。
    不存在“存放主内存的变量的一份拷贝”这个。
    都是实时的,list.get(0)只能是start, list.get(1)才是end,没看见取。
      

  3.   

    run中有这么一段,如果如你所说是因为System.out的原因的话线程会一直接running。而且list也是全局变量
    while (t1 == 0){
                System.out.println(threadName + " is running");
    }
      

  4.   

    回错贴了?
    我的问题是 在线程testThread启动后,为什么主线程更新基本类型和String(t1和s1)在线程运行时能实时传递,但list之类的对象就不行。
    不存在“存放主内存的变量的一份拷贝”这个。
    都是实时的,list.get(0)只能是start, list.get(1)才是end,没看见取。程序模拟得有问题,先结贴,周一找到代码后再开。
      

  5.   

    run中有这么一段,如果如你所说是因为System.out的原因的话线程会一直接running。而且list也是全局变量
    while (t1 == 0){
                System.out.println(threadName + " is running");
    }
    你说的情况不会发生,原因有二,一个是重排序,一个是线程调度。