黑马程序员技术交流社区
标题:
等待唤醒机制的问题
[打印本页]
作者:
刘俊佳
时间:
2012-8-16 09:29
标题:
等待唤醒机制的问题
以下是代码:
package thread2;
class Res {
private String name;
private String sex;
private boolean flag = false;
public synchronized void set(String name, String sex) {
if (flag)
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
this.name = name;
this.sex = sex;
flag = true;
this.notify();
}
public synchronized void out() {
if(!flag)
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
flag=false;
this.notify();
}
System.out.println((name + "........." + sex));
}
}
复制代码
package thread2;
public class Input implements Runnable {
private Res r;// 建立一个引用
Input(Res r) {
this.r = r;
}
public void run() {
int x = 0;
while (true) {
if (x == 0)
r.set("milk", "man");
else
r.set("丽丽", "女女女女女女女女女");
x = (x + 1) % 2;
}
}
}
复制代码
package thread2;
public class Output implements Runnable {
private Res r;
Output(Res r) {
this.r = r;
}
public void run() {
while(true){
r.out();
}
}
}
复制代码
package thread2;
public class InputOutputDemo
{
public static void main(String[] args)
{
Res r=new Res();
new Thread(new Input(r)).start();
new Thread(new Output(r)).start();
}
}
复制代码
以下是打印结果,打印的全部都是这样的,不应该是交替打印吗?如打印完milk....man后再打印丽丽......女女女女女女?:
milk.........man
milk.........man
milk.........man
milk.........man
milk.........man
milk.........man
作者:
官文昌
时间:
2012-8-16 10:22
package thread2;
class Res {
private String name;
private String sex;
private boolean flag = false;
public synchronized void set(String name, String sex) {
if (flag)
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
this.name = name;
this.sex = sex;
flag = true;
this.notify();
}
public synchronized void out() {
if(!flag)
try {
this.wait();
} catch (InterruptedException e)
{
e.printStackTrace();
// flag=false;
// this.notify();//写代码不够仔细啊,咋能把这两句代码放在catch()里面啊。
}
flag=false;
this.notify();
System.out.println((name + "........." + sex));
}
}
作者:
刘俊佳
时间:
2012-8-29 08:45
问题已解决,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2