鱼C论坛

 找回密码
 立即注册
查看: 1373|回复: 19

[已解决]多线程 使用lock锁 同步继承Thread类的线程出现异常

[复制链接]
发表于 2022-12-8 22:01:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 minamikotori 于 2022-12-8 22:07 编辑
class MyThread2 extends Thread{

    private static int ticket = 100;
    private ReentrantLock lock = new ReentrantLock();
    @Override
    public void run() {


            while (true){
                try {
                    lock.lock();
                    if (ticket > 0) {

                        System.out.println(currentThread().getName() + ":" + ticket);
                        ticket--;
                    } else
                        break;

                } finally {
                    lock.unlock();
                }
            }

    }
}
public class LockTest {
    public static void main(String[] args) {

        MyThread2 myThread1 = new MyThread2();
        MyThread2 myThread2 = new MyThread2();
        MyThread2 myThread3 = new MyThread2();
        myThread1.start();
        myThread2.start();
        myThread3.start();





    }
}
为什么会出现3个100呢,而99到1都是正常的,使用实现Runnable方法的时候就是正常的

楼主尝试把lock改成static后发现就变正常了 应该是没有使用同一个锁的问题导致的
但是为什么没有static时,只有100会出现异常 其余数字仅出现一次
最佳答案
2022-12-9 14:45:35
minamikotori 发表于 2022-12-9 14:31
对 我知道是各用各的锁 那后面99到1 都只出现一次难道仅仅是巧合吗

巧合,中间打个sleep就能看见,每个都打印三次
QQ截图20221208220004.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-12-8 22:05:34 | 显示全部楼层
本帖最后由 minamikotori 于 2022-12-8 22:07 编辑

楼主尝试把lock改成static后发现就变正常了 应该是没有使用同一个锁的问题导致的
但是为什么没有static时,只有100会出现异常 其余数字仅出现一次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-8 22:27:02 | 显示全部楼层
学习下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-8 22:27:54 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-8 22:28:40 | 显示全部楼层

回帖奖励 +40 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-8 22:29:20 | 显示全部楼层

回帖奖励 +40 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-8 23:32:56 | 显示全部楼层
cy
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-9 08:25:49 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-9 08:26:36 | 显示全部楼层

回帖奖励 +40 鱼币

怎么可能用lock……用static试试?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-9 08:29:53 | 显示全部楼层
学习下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-9 08:30:28 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-9 08:33:21 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-9 08:36:40 | 显示全部楼层
脸太黑了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-9 08:56:31 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-9 09:12:48 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-9 11:22:56 | 显示全部楼层
minamikotori 发表于 2022-12-8 22:05
楼主尝试把lock改成static后发现就变正常了 应该是没有使用同一个锁的问题导致的
但是为什么没有static时 ...

有没有可能之后用的锁都是第三次100的那个

评分

参与人数 1鱼币 +5 收起 理由
minamikotori + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-9 11:44:58 | 显示全部楼层
1335516694 发表于 2022-12-9 11:22
有没有可能之后用的锁都是第三次100的那个

那是为什么呢 能详细说明下嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-9 13:43:36 | 显示全部楼层
minamikotori 发表于 2022-12-9 11:44
那是为什么呢 能详细说明下嘛

这个就是每个线程各用各的锁,也就是你这个上锁就不管用,在线程的run方法里面sleep一下就看出来了

评分

参与人数 1鱼币 +5 收起 理由
minamikotori + 5 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-9 14:31:12 | 显示全部楼层
1335516694 发表于 2022-12-9 13:43
这个就是每个线程各用各的锁,也就是你这个上锁就不管用,在线程的run方法里面sleep一下就看出来了

对 我知道是各用各的锁 那后面99到1 都只出现一次难道仅仅是巧合吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-9 14:45:35 | 显示全部楼层    本楼为最佳答案   
minamikotori 发表于 2022-12-9 14:31
对 我知道是各用各的锁 那后面99到1 都只出现一次难道仅仅是巧合吗

巧合,中间打个sleep就能看见,每个都打印三次

评分

参与人数 1鱼币 +5 收起 理由
minamikotori + 5 无条件支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 04:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表