黑马程序员技术交流社区
标题:
线程wait,notify问题
[打印本页]
作者:
NNERO
时间:
2014-4-26 10:16
标题:
线程wait,notify问题
本帖最后由 NNERO 于 2014-4-26 14:56 编辑
public class Text111
{
public static void main(String[] args)
{
Res r1 = new Res("nero",18);
Ras r2 = new Ras("nnnnnero","man");
Thread t1 = new Thread(r1);
t1.start();
r2.start();
}
}
class Res implements Runnable{
String name;
int age;
int count = 100;
boolean flag = true;
public Res(String name, int age) {
super();
this.name = name;
this.age = age;
}
public void run(){
while(true){
synchronized(Res.class){
try {
if(!flag)
Res.class.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
if(count>0){
count--;
System.out.println(Thread.currentThread().getName()+"..."+name+"..."+age+"..."+count);
flag=true;
}
Res.class.notify();
}
}
}
}
class Ras extends Thread{
String name;
String sex;
int count=100;
boolean flag = true;
public Ras(String name, String sex) {
super();
this.name = name;
this.sex = sex;
}
public void run(){
while(true){
synchronized(Ras.class){
if(flag)
try {
Res.class.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
if(count>0){
System.out.println(name+"::"+sex);
count--;
flag = false;
}
Res.class.notify();
}
}
}
}
复制代码
我用了2种方法创建了2个线程,想让它们交替打印,但是运行出错啊。
我知道2个线程的wait方法必须用同一个锁,但是我这里Res.class这个其实也是同一个对象啊,直接调用它的wait方法应该可以啊
不知道什么地方出问题了。。 求解答!!!
作者:
王松松
时间:
2014-4-26 11:49
1,你的线程是需要操作共享数据么?你这里两个线程操作的不是同一个对象
2,使用this.wait()不就可以了么?即当前线程等待,为什么你使用Res.class.wait()?有什么想法么?
作者:
你为谁归来
时间:
2014-4-26 13:21
Res.class.wait()你这个代码是干啥的?直接用当前对象调用wait就可以啦。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2