public class CommunicationTest {
public static void main(String[] args) {
Number n1 = new Number();
n1.setName("线程1");
n1.start();
Number n2 = new Number();
n2.setName("线程2");
n2.start();
}
}
class Number extends Thread{
private static int i ;
@Override
public void run() {
for(;;) {
synchronized (Number.class) {
notify();
if(i <= 100) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(getName() + ":" + i);
i++;
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else{
break;
}
}
}
}
}
线程安全问题,我下面的想法是交替执行sout(i),为什么报错
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 技术专家团-小桥流水 2022-04-28 17:49关注
(1)静态变量 i 没有初始化啊。
private static int i =0;
(2)notify()和wait()的使用不对。
修改后运行结果:Number类修改如下:
public class Number extends Thread{ private static int i =0; @Override public void run() { for(;;) { synchronized (Number.class) { Number.class.notify();//注意这里加上加锁的对象 if(i <= 100) { try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(getName() + ":" + i); i++; try { Number.class.wait();//注意这里加上加锁的对象 } catch (InterruptedException e) { e.printStackTrace(); } }else{ break; } } } } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 PointNet++的onnx模型只能使用一次
- ¥20 西南科技大学数字信号处理
- ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
- ¥30 STM32 INMP441无法读取数据
- ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
- ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
- ¥15 用visualstudio2022创建vue项目后无法启动
- ¥15 x趋于0时tanx-sinx极限可以拆开算吗
- ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
- ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。