黑马程序员技术交流社区
标题: 多线程的问题,求大神 [打印本页]
作者: tangxiaobo1991 时间: 2014-3-4 19:09
标题: 多线程的问题,求大神
本帖最后由 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交替运行的。
作者: tangxiaobo1991 时间: 2014-3-4 19:11
先来人工置个顶!!!求大神
作者: tangxiaobo1991 时间: 2014-3-4 19:41
有木有阿?最近感觉多线程有点晓困难
作者: e.c 时间: 2014-3-4 20:25
第一个线程if判断完条件为true后就进到while(true)‘code’里了,不会再再判断了
第二个线程if间断完条件为false后就进到while(true)‘function’里了
所以交替
作者: tangxiaobo1991 时间: 2014-3-5 20:45
喔喔,原来如此阿。。了解啦,,多谢多谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |