minamikotori 发表于 2022-12-8 22:01:29

多线程 使用lock锁 同步继承Thread类的线程出现异常

本帖最后由 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会出现异常 其余数字仅出现一次

minamikotori 发表于 2022-12-8 22:05:34

本帖最后由 minamikotori 于 2022-12-8 22:07 编辑

楼主尝试把lock改成static后发现就变正常了 应该是没有使用同一个锁的问题导致的
但是为什么没有static时,只有100会出现异常 其余数字仅出现一次

lxping 发表于 2022-12-8 22:27:02

学习下

lxping 发表于 2022-12-8 22:27:54

{:10_254:}

hellometa 发表于 2022-12-8 22:28:40

{:10_254:}

lxping 发表于 2022-12-8 22:29:20

{:10_266:}

mork_mo 发表于 2022-12-8 23:32:56

cy

kerln888 发表于 2022-12-9 08:25:49

{:10_256:}{:10_256:}{:10_256:}

zhangjinxuan 发表于 2022-12-9 08:26:36

怎么可能用lock……用static试试?

kerln888 发表于 2022-12-9 08:29:53

学习下

kerln888 发表于 2022-12-9 08:30:28

{:10_257:}{:10_257:}{:10_257:}{:10_257:}{:10_257:}

kerln888 发表于 2022-12-9 08:33:21

{:10_254:}{:10_254:}{:10_254:}

kerln888 发表于 2022-12-9 08:36:40

脸太黑了

kerln888 发表于 2022-12-9 08:56:31

{:10_247:}{:10_247:}{:10_247:}{:10_247:}

kerln888 发表于 2022-12-9 09:12:48

{:10_279:}{:10_279:}

1335516694 发表于 2022-12-9 11:22:56

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

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

minamikotori 发表于 2022-12-9 11:44:58

1335516694 发表于 2022-12-9 11:22
有没有可能之后用的锁都是第三次100的那个

那是为什么呢 能详细说明下嘛{:10_266:}

1335516694 发表于 2022-12-9 13:43:36

minamikotori 发表于 2022-12-9 11:44
那是为什么呢 能详细说明下嘛

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

minamikotori 发表于 2022-12-9 14:31:12

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

对 我知道是各用各的锁 那后面99到1 都只出现一次难道仅仅是巧合吗

1335516694 发表于 2022-12-9 14:45:35

minamikotori 发表于 2022-12-9 14:31
对 我知道是各用各的锁 那后面99到1 都只出现一次难道仅仅是巧合吗

巧合,中间打个sleep就能看见,每个都打印三次
页: [1]
查看完整版本: 多线程 使用lock锁 同步继承Thread类的线程出现异常