黑马程序员技术交流社区
标题:
进程间通信问题
[打印本页]
作者:
祁振朋
时间:
2013-3-20 15:28
标题:
进程间通信问题
本帖最后由 祁振朋 于 2013-3-22 18:26 编辑
<P> class NotifyDemo {
public static void main(String[] args) {
final Printer p = new Printer();
new Thread(){
public void run() {
while(true)
try{
p.print1();
Thread.sleep(500);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}.start();
new Thread(){
public void run() {
while(true)
try{
p.print2();
Thread.sleep(500);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}.start();</P>
<P> new Thread(){
public void run() {
while(true)
try{
p.print3();
Thread.sleep(500);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}.start();
}
}</P>
<P>class Printer {
private int flag=1;
private int i=0,j=0;
public synchronized void print1()throws Exception
{
if (flag!=1)
wait();
System.out.print("传");
System.out.print("智");
System.out.print("播");
System.out.print("客");
System.out.print(flag);
System.out.print("\r\n");
flag=2;
notifyAll();</P>
<P> }
public void print2() throws Exception
{
synchronized (this) {
if(flag!=2)
wait();
System.out.print("黑");
System.out.print("马");
System.out.print("程");
System.out.print("序");
System.out.print("员");
System.out.print(flag);
System.out.print("\r\n");
flag=3;
notifyAll();
}
}</P>
<P> public synchronized void print3()throws Exception
{
if (flag!=3)
wait();
System.out.print("i");
System.out.print("t");
System.out.print("c");
System.out.print("a");
System.out.print("s");
System.out.print("t");
System.out.print(flag);
System.out.print("\r\n");
flag=1;
notifyAll();
}
}</P>
复制代码
我想做进程间通信的测试,为什么用了if()不行?
作者:
罗玉宁
时间:
2013-3-22 01:36
如果你是做线程间的通信的话,这样已经可以了。
不知道你说的if()不行是什么意思?
作者:
杨杨
时间:
2013-3-22 09:12
本帖最后由 杨杨 于 2013-3-22 09:13 编辑
if 和while的区别你知道吗
if(条件1){内容1}while(条件2){内容2}
if条件1成立是执行 if内容1
while 只要满足条件2就不断的执行内容2 不断的执行
只有当条件执行一次的时候if才等价于while
作者:
谭辉
时间:
2013-3-22 13:35
应该用while,
因为if只判断了一次,
if (flag!=1)
wait();
如果当if判断完后,执行权被其他线程夺走,并且修改了flag的值,当重新拥有执行权后就不会再判断了而是执行wait(),显然会出错,
而while就不同了,就算if判断完后,执行权被其他线程夺走,并且修改了flag的值当重新拥有执行权后,还会在判断flag的值,wait()就不会执行了.也就不会出错了
作者:
陈丽莉
时间:
2013-3-22 16:12
记得及时处理帖子哦,继续追问,或将分类改成【已解决】~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2