xzdjsnb 2022-04-28 17:46 采纳率: 92.2%
浏览 60
已结题

线程安全问题,我下面的想法是交替执行sout(i),为什么报错


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

3条回答 默认 最新

  • 关注

    (1)静态变量 i 没有初始化啊。
    private static int i =0;
    (2)notify()和wait()的使用不对。
    修改后运行结果:

    img

    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;
                    }
                }
            }
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月7日
  • 已采纳回答 4月29日
  • 创建了问题 4月28日

悬赏问题

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