雍振 2022-04-19 22:28 采纳率: 66.7%
浏览 25

为什么用了lock锁后线程还是不安全,输出了两次100,其他正常输出

class ThreadText{
public static void main(String[] args) {
MyThread1 myThread11=new MyThread1();
MyThread1 myThread1111 =new MyThread1();
myThread11.setName("窗口1");
myThread1111.setName("窗口2");
myThread11.start();
myThread1111.start();
}
}
class MyThread1 extends Thread {
static Object object=new Object();
static int num=100;
ReentrantLock lock= new ReentrantLock(true);
@Override
public void run(){

        while(num>=0){
            lock.lock();
            System.out.println(Thread.currentThread()+":"+num);
            num--;
            lock.unlock();
        }
    }

}

  • 写回答

1条回答 默认 最新

  • 离陌lm 2022-04-20 00:11
    关注

    获取锁的位置放在While循环前面试试

    评论

报告相同问题?

问题事件

  • 创建了问题 4月19日

悬赏问题

  • ¥20 如何让程序ab.eXe自已删除干净硬盘里的本文件自己的ab.eXe文件
  • ¥50 爬虫预算充足,跪巨佬
  • ¥15 滑块验证码拖动问题悬赏
  • ¥15 Wanted but not invoked:Actually, there were zero interactions with this moc
  • ¥20 怎么驱动tb6612
  • ¥15 Arcgis 3D效果点要素
  • ¥15 在执行yolo训练脚本的时候,没有报错,在扫描val这一步后就推出执行了
  • ¥15 delphi开发的WEBSERVER改用HTTPS协议
  • ¥15 pic16f877A单片机的计数器proteus仿真失效
  • ¥100 调查 Vitis AI 中验证 .xmodel 量化后的正确性