本帖最后由 何明辉 于 2012-7-27 12:23 编辑
class Common
{
private String name;
private int age;
public static boolean flag=false;
void set(String name ,int age)
{
this.name=name;
this.age=age;
}
String get()
{
return name+"...."+age;
}
}
class In implements Runnable
{
Common com;
In(Common com)
{
this.com=com;
}
public void run()
{
int x=0;
while(true)
{
while(!Common.flag)
{
if(x==0)com.set("HeMingHui",25);
else com.set("HeMingSheng",23);
x=++x%2;
Common.flag=false;
}
}
}
}
class Out implements Runnable
{
Common com;
Out(Common com)
{
this.com=com;
}
public void run()
{
while(true)
{
while(Common.flag)
{
System.out.println(com.get());
Common.flag=true;
}
}
}
}
class InOutDemo1
{
public static void main(String[] args)
{
Common com=new Common();
Thread t1=new Thread(new In(com));
Thread t2=new Thread(new Out(com));
t1.start();
t2.start();
}
}
上面的程序中实现的功能是:线程t1实现输入信息,线程t2输出信息,在dos中实现交替显示。
(1)根据对同步的概念的理解我设计上面的程序也能实现相应的功能啊,线程t1和t2通过对flag值的交替改变也能实现同步啊,怎么没有达到预期的效果。
(2)还有就是我看毕老师第十二天第5集的视频上面列子中,列子里面线程t1,t2,t3,t4中t1和t2都在同步函数里面,也就是没有出来,好比老师说的蹲厕所的列子,只要是在里面,不管碰到是sleep()和wait()都会在里面,那么其他线程就不会进去。所以最后结果要么全部是输入,要么全部是输出。因为毕老师第11天第10集就是这么讲的,如果碰到sleep()就出了同步的话,那么第11天10集里面最后加了同步在碰到sleep()后有可能输出结果还会出现0,-1,-2的情况。请高手帮我纠正误区,谢谢!
|
|