运行时只会出现“李四————12”这个结果,求指导出现问题的地方

JAVA_small_empty 2020-11-14 12:05:42
class People{
private String name;
private int age;
private boolean flag = false;
public synchronized void set(String name,int age) {
if(flag) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.name = name;
this.age = age;
flag = true;
this.notify();
}
public synchronized void out() {
if(!flag) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(name+"————"+age);
flag = false;
this.notify();
}
}
class my_In implements Runnable{
People p1;
my_In(People p1){
this.p1 = p1;
}
public void run() {
int y = 0;
while(true) {
if(y==0) {
p1.set("李四", 12);
}else {
p1.set("张三", 21);
}
y = (y+1)%2;
// p1.set("李四", 12);
}
}
}
class my_Out implements Runnable{
People p1;
my_Out(People p1){
this.p1 = p1;
}
public void run() {
p1.out();
}
}
public class WNDemo {
public static void main(String[] args) {
People p = new People();
my_In m1 = new my_In(p);
my_Out m2 = new my_Out(p);
Thread t1 = new Thread(m1);
Thread t2 = new Thread(m2);
t1.start();
t2.start();
}
}
...全文
2778 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
JAVA_small_empty 2020-11-15
  • 打赏
  • 举报
回复
多谢多谢,检查了好几遍,就这里没注意,试过了,完全可以,多谢指点!
  • 打赏
  • 举报
回复
你执行的打印线程相当于指执行了一次就没了,肯定就只打印一个李四,看图去试试

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧