鱼C论坛

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

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

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

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

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

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

  2.     private static int ticket = 100;
  3.     private ReentrantLock lock = new ReentrantLock();
  4.     @Override
  5.     public void run() {


  6.             while (true){
  7.                 try {
  8.                     lock.lock();
  9.                     if (ticket > 0) {

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

  14.                 } finally {
  15.                     lock.unlock();
  16.                 }
  17.             }

  18.     }
  19. }
复制代码
  1. public class LockTest {
  2.     public static void main(String[] args) {

  3.         MyThread2 myThread1 = new MyThread2();
  4.         MyThread2 myThread2 = new MyThread2();
  5.         MyThread2 myThread3 = new MyThread2();
  6.         myThread1.start();
  7.         myThread2.start();
  8.         myThread3.start();





  9.     }
  10. }
复制代码

为什么会出现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-4-16 19:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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