美文网首页
线程的死锁问题

线程的死锁问题

作者: 冯宏志 | 来源:发表于2020-12-15 11:29 被阅读0次
  • 不同线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的思索
  • 出现思索后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续
解决线程安全问题的方式三:Lock锁(JDK5新增)
  1. 实例化ReentrantLock(ReentrantLock是实现了Lock接口的一个类)
  2. 调用锁定方法fflock()
  3. 调用解锁unlock()
import java.util.concurrent.locks.ReentrantLock;

public class LockTest {
    public static void main(String[] args) {
        Window w = new Window();
        Thread t1 = new Thread(w);
        Thread t2 = new Thread(w);
        Thread t3 = new Thread(w);

        t1.setName("窗口1");
        t2.setName("窗口2");
        t3.setName("窗口3");

        t1.start();
        t2.start();
        t3.start();
    }
}

class Window implements Runnable{
    private int ticket = 100;
    //实例化ReentrantLock
    private ReentrantLock lock = new ReentrantLock();

    @Override
    public void run() {
        while (true) {
            try {
                //调用锁定lock()
                lock.lock();
                if (ticket > 0) {
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    System.out.println(Thread.currentThread().getName() + "买票,票号为:" + ticket);
                    ticket--;
                } else
                    break;
            } finally {
                //调用解锁方法unlock()
                lock.unlock();
            }
        }
    }
}

  • synchronized与Lock的不同
    synchronized机制在执行完相应的同步代码以后,自动的释放同步监视器。
    Lock需要手动启动同步lock(),同时结束同步也需要手动实现unlock()

相关文章

  • 面试官:连多线程问题你都一问三不知,还要我怎么“放水”?

    面试官:问你几个多线程相关的问题吧,说一下导致线程死锁的原因,怎么解除线程死锁? 程序员阿里:这个...死锁......

  • Synchronized关键字详解2(对非object持锁)

    4.死锁:同步方法容易造成死锁。Java线程死锁是一个经典的多线程问题,因为不同的线程都在等待根本不可能被释放的锁...

  • JavaEE面试题总结 Day39 2018-12-29

    什么是线程死锁?死锁如何产生?如何避免线程死锁? 死锁的介绍: 线程死锁是指由于两个或者多个线程互相持有对方所需要...

  • 关于主线程执行同步任务造成死锁的思考

    经典问题重现 bug 粘贴主线程+同步造成死锁 要想明白,为什么造成死锁,首先要搞懂主线程是干嘛的 主线程程序运行...

  • 线程的死锁问题

    不同线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的思索 出现思索后,不会...

  • jstack命令:教你如何排查多线程问题

    这是之前的一个死锁案例: 一个多线程死锁案例,如何避免及解决死锁问题? 如程序中发生这样的死锁问题该如何排查呢?我...

  • Python中的各种锁

    Python之死锁 死锁分为两种情况,多进程/线程的死锁.或者是单线程的死锁. 1.首先看一下单线程的死锁,单线程...

  • 防止死锁的加锁机制

    防止死锁的加锁机制 问题 你正在写一个多线程程序,其中线程需要一次获取多个锁,此时如何避免死锁问题。 解决方案 在...

  • 5. 死锁

    线程死锁 死锁是两个或更多线程阻塞着等待其它处于死锁状态的线程所持有的锁。死锁通常发生在多个线程同时但以不同的顺序...

  • 线程相关面试题

    线程 多线程会带来什么问题 使用多线程会出现内存泄露,上下文切换,死锁问题等 线程的生命周期 线程被创建,进入初始...

网友评论

      本文标题:线程的死锁问题

      本文链接:https://www.haomeiwen.com/subject/rvtziktx.html