qq_36780467 2017-08-11 13:17 采纳率: 0%
浏览 1769

关于线程安全的问题变量定义的问题

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();
        }
    }
}
  • 写回答

2条回答

  • 鼠晓 博客专家认证 2017-08-11 14:04
    关注

    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)

    还有什么问题可以继续追问,,,如果帮到你了,,给个采纳...............^.^

    评论

报告相同问题?

悬赏问题

  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式