public class Student {
boolean flag ;//这里定义一个boolean变量
String name;
int age;
}
public class GetStudent implements Runnable{
private Student s;
public GetStudent(Student s){
this.s = s;
}
@Override
public void run() {
while(true){
synchronized (s){
if(!s.flag) //这里怎么看他是这个flag就表示数据有无视屏解释是默认是没有数据false
//有数据就是true,不太理解我明白
{
try {
s.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(s.name+"--"+s.age);
s.flag = false;
s.notify();
}
}
}
boolean 初始化时是 falst
Student 类中的 flag是一个标记,
一开始 如果,,,new Student();,,,,此时什么都没有传,flag是falst
当传值的时候需要先把 flag 设置为true,,表示有学生信息,(这个过程是需要程序做的,不是自动的)
if(!s.flag) //这里怎么看他是这个flag就表示数据有无视屏解释是默认是没有数据false
//有数据就是true,不太理解我明白
{
try {
s.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这个判断是 ,,如果没有数据 s.wait()释放,,释放这里的锁 synchronized (s)
还有什么问题可以继续追问,,,如果帮到你了,,给个采纳...............^.^
我的理解是:当你传student 对象到线程里时,如果这个对象的flag=true,那么就不进入if 进而执行 System.out.println(s.name+"--"+s.age)。
如果你传的对象中的flag=false, 那么线程代码就会进入if,这时候 执行s.wait(),释放锁,从而不不不不不不会执行System.out.println(s.name+"--"+s.age)了