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 远程桌面文档内容复制粘贴,格式会变化
- ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
- ¥15 这种微信登录授权 谁可以做啊
- ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
- ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
- ¥15 网络设备配置与管理这个该怎么弄
- ¥20 机器学习能否像多层线性模型一样处理嵌套数据
- ¥20 西门子S7-Graph,S7-300,梯形图
- ¥50 用易语言http 访问不了网页
- ¥50 safari浏览器fetch提交数据后数据丢失问题