A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  Lock l = new ReentrantLock();
    @Override
    public void run() {
        while(true){
            l.lock();
            if(num == 0){
                break;
            }
            String name = Thread.currentThread().getName();
            System.out.println(name+"卖出了第"+(1000-num + 1)+"张票,还剩"+(--num)+"张");
            l.unlock();
            if(num == 0){
                break;
            }
        }
    }
}
if判定在lock内代码上时程序不动但是没有停止,只有在代码下在加一次if判定程序才会停止运行

9 个回复

倒序浏览
晏汶 来自手机 初级黑马 2018-7-27 00:02:50
沙发
你试试给下面的if去掉,再在上面的if里面break上面加一行l.unlock
回复 使用道具 举报
晏汶 来自手机 初级黑马 2018-7-27 02:34:31
藤椅
可能是因为没有释放锁吧,锁死了.虽然是根据现象猜的
回复 使用道具 举报
晏汶 发表于 2018-7-27 02:34
可能是因为没有释放锁吧,锁死了.虽然是根据现象猜的

下面那个if去掉会出现另一个问题
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
晏汶 初级黑马 2018-7-27 21:25:04
7#
yyl110 发表于 2018-7-27 10:43
下面那个if去掉会出现另一个问题

int i = 100;
    Lock l = new ReentrantLock();

    @Override
    public void run() {
        while (true) {
            l.lock();
            if (i <= 0) {
                l.unlock();
                break;
            }
            i--;
            System.out.println(Thread.currentThread().getName() + "卖出了第" + (100 - i) + "张票,还剩" + i + "张");
            l.unlock();
        }
    }
你确定会出现另一个问题?什么问题呢,我试了下没啥问题啊
Thread-2卖出了第97张票,还剩3张
Thread-2卖出了第98张票,还剩2张
Thread-2卖出了第99张票,还剩1张
Thread-2卖出了第100张票,还剩0张
代码正常结束
回复 使用道具 举报
gzsba 中级黑马 2018-7-28 00:42:33
8#
这是个问题,值得分析一下
回复 使用道具 举报
yyl110 中级黑马 2018-7-28 19:43:32
9#
晏汶 发表于 2018-7-27 21:25
int i = 100;
    Lock l = new ReentrantLock();

忘了,我记得当时除了别的问题
回复 使用道具 举报
gzsba 发表于 2018-7-28 00:42
这是个问题,值得分析一下

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马