m0_67001348 2022-10-23 09:51 采纳率: 88.9%
浏览 16
已结题

idea java多线程问题

public class MultithreadingTest {
public static void main(String[] args) {
SellTicket sellTicket = new SellTicket();
Thread thread1 = new Thread(sellTicket, "窗口1");
Thread thread2 = new Thread(sellTicket, "窗口2");
Thread thread3 = new Thread(sellTicket, "窗口3");
thread1.start();
thread2.start();
thread3.start();
}
}
public class SellTicket implements Runnable {
private int tickets = 100;
private Object o = new Object();
private int x = 0;
private Lock lock = new ReentrantLock();

@Override
public void run() {
    while (true) {

       
        lock.lock();
            if (tickets > 0) {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName() + "正在出售第" + tickets + "张票");
                tickets--;
            lock.unlock();
      
        }
    }
}

}

为什么我运行的时候只有窗口1在动 我的jdk好像是18

  • 写回答

1条回答 默认 最新

  • sum墨 2022-10-24 19:15
    关注

    首先,Reentrantlock默认使用非公平锁,可能导致其他线程永远无法获取到锁,造成线程“饥饿”现象。
    private Lock lock = new ReentrantLock(true);这个就可以把ReentrantLock变成公平锁,但公平锁会损失一定性能

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

    报告相同问题?

    问题事件

    • 系统已结题 11月7日
    • 已采纳回答 10月30日
    • 创建了问题 10月23日

    悬赏问题

    • ¥50 74LS系列 74LS00 74LS04设计一个RS485电路(关键词-差分)
    • ¥30 各位help写一下代码
    • ¥15 在运行SDEdit模型下载不了
    • ¥15 求51控制l298n驱动的小车中超声波避障怎么写
    • ¥15 电脑连上WIFI却用不了
    • ¥30 MATLAB在RLC电路的固有响应和阶跃响应GUI仿真报告
    • ¥15 hyper-v出现的问题
    • ¥15 有能用的可加酬金,求可以批量下载懒人听书的软件,能登录自己帐号的。
    • ¥100 高博一起做RGB-D SLAM(5)VO无法出visualisation问题
    • ¥15 使用matlab进行手眼标定的仿真验证,得到齐次矩阵与opencv相差较大