解决方案 »
- io流的关闭顺序疑惑
- 200分 求教 如何修改throwable里面的StackTraceElement的内容 都来看看哇 很简单的问题 但是我不会
- 高手求助啊,小弟实在纠结啊
- 关于java垃圾回收的问题(代码问题)
- 关于assertion的题
- 帮忙看一下程序(在线等待急!)
- 关于generics java
- 怎样把string类型的转换成date类型
- 一个很简单JBuilder问题
- 当申请一个xxx的个人主页后,像xxx.yeah.net(或xxx.yyy.com)便可映射到xxx的目录里,这是如何做到的呢?
- 新手求助,虽然我很笨
- javax.mail.AuthenticationFailedException: failed to connect
是在说 这是在唤醒基类的锁
这是在访问被覆盖的notify
子类已经重写了他
即便 notify是 final
真的好厉害
private String name = "谢龙涛";
private String hobby = "篮球";
private boolean flag = false;
boolean key=true;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
public synchronized void set(String name,String hobby){
System.out.println(Thread.currentThread().getName()+"set");
try {
while(key)
this.wait();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
this.setName(name);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.setHobby(hobby);
key=true;
super.notify();
}
public synchronized void get(){
System.out.println(Thread.currentThread().getName()+"get");
try {
while(!key)
this.wait();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("name:" + this.getName() + " hobby:"
+ this.getHobby());
key= false;
super.notify();
}
}
/**
*
*/
package com.meritit.dm.csdn.thread;import java.util.concurrent.TimeUnit;public class Info {
private String name = "谢龙涛";
private String hobby = "篮球";
private boolean flag; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getHobby() {
return hobby;
} public void setHobby(String hobby) {
this.hobby = hobby;
} public synchronized void set(String name, String hobby) {
if (!flag) {
try {
wait();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
setName(name);
setHobby(hobby);
System.out.println(Thread.currentThread().getName() + " set[" + name
+ "," + hobby + "]");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
flag = false;
notify();
} public synchronized void get() {
if (flag) {
try {
wait();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + " get[" + name
+ "," + hobby + "]");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
flag = true;
notify();
}
}