• 多线程死锁问题


    同步中嵌套同步,导致锁无法释放

    package com.toov5.threadSecurity;
    class Thread009 implements Runnable {
        private int trainCount = 100;
        private Object oj = new Object();
        public boolean flag = true;
    
        public void run() {
    
            if (flag) {
                while (trainCount > 0) {
                    synchronized (oj) {
                        try {
                            Thread.sleep(10);
                        } catch (Exception e) {
                            // TODO: handle exception
                        }
                        sale();
                    }
    
                }
            } else {
                while (trainCount > 0) {
                    sale();
                }
    
            }
    
        }
    
        public synchronized void sale() {
            synchronized (oj) {
                try {
                    Thread.sleep(10);
                } catch (Exception e) {
    
                }
                if (trainCount > 0) {
                    System.out.println(Thread.currentThread().getName() + "," + "出售第" + (100 - trainCount + 1) + "票");
                    trainCount--;
                }
            }
        }
    }
    
    public class Test009 {
        public static void main(String[] args) throws InterruptedException {
            Thread009 threadTrain = new Thread009();
            Thread t1 = new Thread(threadTrain, "窗口1");
            Thread t2 = new Thread(threadTrain, "窗口2");
            t1.start();
            Thread.sleep(40);
            threadTrain.flag = false;
            t2.start();
    
        }
    }

    t1先获取oj锁,然后this锁,才能把程序执行完毕

    t2现货区this锁,再获取oj锁,才能把程序执行完毕

    结果:

  • 相关阅读:
    Shell编程常用
    毕设问答
    《如何高效学习》
    《如何阅读一本书》(未完)
    《牧羊少年奇幻之旅》
    2019.04月总结
    上周还是合意的,且找到了一定的遵循4.6-4.12

    错误和异常
    数据结构
  • 原文地址:https://www.cnblogs.com/toov5/p/9828100.html
Copyright © 2020-2023  润新知