本帖最后由 tangxiaobo1991 于 2014-3-4 19:33 编辑
关于线程的疑问: 看下面的代码的红色部分,我觉得当将false赋值给w.flag后,window类中的flag就会变为false(因为flag也是它们的共享数据),在这之后的程序都 应该是运行同步函数show()函数,可为什么还有同步代码块和同步函数交替运行? class Window implements Runnable { private int tick=500; Object o=new Object(); public boolean flag=true; public void run() { if(flag) { while(true) { synchronized(o) { if(tick>0) { System.out.println(Thread.currentThread().getName()+"code..."+tick--); } } } }
else while(true) show(); } public synchronized void show()//this { if(tick>0) System.out.println(Thread.currentThread().getName()+"function..."+tick--); } }
class TicketDemoh { public static void main(String[] args) { Window w=new Window(); Thread t1=new Thread(w); Thread t2=new Thread(w); t1.start(); try{Thread.sleep(10);}catch(Exception e){} w.flag=false;//??????????? t2.start(); }} 其运行结果如下:是code和function交替运行的。
|