`

死锁

阅读更多
/**
 * 死锁
 */
public class DeadLockDemo {
    private static Object lockA = new Object();
    private static Object lockB = new Object();

    private static void startThreadA(){
        Thread aThread = new Thread(){
            @Override
            public void run() {
                synchronized (lockA) {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                    }
                    synchronized (lockB) {}
                }
            }
        };
        aThread.start();
    }

    private static void startThreadB(){
        Thread bThread = new Thread(){
            @Override
            public void run() {
                synchronized (lockB) {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                    }
                    synchronized (lockA) {}
                }
            }
        };
        bThread.start();
    }

    public static void main(String[] args) {
        startThreadA();
        startThreadB();
    }

/**
 * 1.尽量避免同时持有多个锁,或按照相同的顺序去申请锁
 * 2.使用显示锁里的tryLock、tryLock(long time, TimeUnit unit)。
 *   可以在获取不到锁的时候,释放已经持有的锁,
 *   然后再次尝试获取锁或干脆放弃,避免死锁。
 * 3.通过jstack命令发现死锁
 */
}
分享到:
评论

相关推荐

    sqlserver如何快速查询死锁语句

    在SQL Server数据库管理系统中,死锁是一个常见的性能问题,它发生在两个或多个事务相互等待对方释放资源,导致它们都无法继续执行。死锁不仅影响数据库的正常运行,还可能导致数据一致性问题。本文将详细介绍如何在...

    进程线程及死锁

    进程、线程、死锁和POSIX规范的系统调用 进程是操作系统中一个独立的执行单元,它拥有自己的虚拟地址空间和系统资源。线程是轻量级的进程,它共享同一个进程的虚拟地址空间和系统资源。理解进程和线程的概念对于...

    操作系统-死锁

    从进程同步的概念可以知道,当并发进程需要竞争使用资源或需要相互协作向前推进时,如果不采取同步措施,或同步措施不恰当,则很容易导致并发进程不能向前推进而陷入僵局,即死锁现象。死锁是发生在一组相互竞争或...

    SQL Server死锁的解除方法

    "SQL Server死锁的解除方法" SQL Server死锁是指在多个事务之间的资源竞争时,出现的循环等待资源的现象。死锁会导致系统性能下降,甚至会导致系统崩溃。因此,解决SQL Server死锁是非常重要的。 SQL Server死锁的...

    oracle数据库解决死锁

    Oracle数据库解决死锁 Oracle数据库解决死锁是指在Oracle数据库中出现的死锁问题,通过使用PL/SQL语句手动解决死锁问题。死锁是当多个事务在等待其他事务释放资源时,导致系统无法继续执行的现象。 在Oracle...

    解决ORACLE死锁问题

    一、数据库死锁的现象 程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。 二、死锁的原理 当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提 交,另一条对于这一列...

    sql数据库死锁查询工具

    在SQL数据库管理中,死锁和阻塞是常见的问题,特别是在多用户环境下,它们可能导致系统性能下降甚至数据丢失。理解并有效地处理这些问题至关重要。本文将深入探讨“sql数据库死锁查询工具”及其在解决数据库死锁和...

    通过Android trace文件分析死锁ANR实例过程

    ANR的产生原因多种多样,其中包括CPU负载过高、输入事件未及时处理以及我们重点关注的——死锁。本文将通过一个具体的死锁导致的ANR实例,解析如何利用Android trace文件来分析和解决这类问题。 当Android系统检测...

    DB2解决表死锁

    本文将深入探讨“DB2解决表死锁”这一主题,结合提供的资源“DB2解除表锁.doc”,我们将讨论死锁的基本概念、DB2中的死锁检测、死锁预防以及如何在遇到死锁时进行有效的解决。 首先,我们要理解什么是死锁。死锁是...

    死锁的检测与接触 C语言

    在操作系统领域,死锁是指两个或多个并发进程互相等待对方持有的资源而无法继续执行的状态。本实验报告关注的是死锁的检测与解除,通过C语言实现。实验的主要目的是理解操作系统如何检测死锁的发生,并在发生死锁时...

    操作系统实验六 死锁问题实验

    操作系统中的死锁问题是一个复杂而重要的概念,它涉及到并发进程之间的资源分配和同步问题。死锁是指两个或多个进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉它们都将无法推进下去。这个...

    死锁检测工具LockCop.zip

    在IT领域,尤其是在多线程编程中,死锁是一个常见的问题,它发生在两个或多个并发执行的线程互相等待对方释放资源,导致它们都无法继续执行的状态。为了解决这一问题,开发者需要具备对死锁的理解以及如何检测和避免...

    db2死锁问题分析及解决方案

    ### DB2死锁问题分析及解决方案 #### 一、引言 在数据库管理与维护过程中,死锁问题是一个常见的挑战,特别是在使用IBM DB2这样的大型关系型数据库管理系统时。本文将详细探讨DB2中死锁问题的分析方法及有效的解决...

    SQLServler自动杀死死锁进程

    在SQL Server数据库管理系统中,死锁是常见的并发问题,它发生在两个或多个事务相互等待对方释放资源,导致它们都无法继续执行。"SQLServer自动杀死死锁进程"这一话题旨在探讨如何配置SQL Server来自动检测并解决...

    mysql死锁的一些案例

    MySQL数据库在处理并发事务时,可能会遇到一种特殊的情况,即死锁。死锁是指两个或多个事务在执行过程中,因争夺资源而造成的一种相互等待的现象,若无外力干涉它们将无法继续执行。死锁是数据库系统中常见的问题,...

    操作系统实验二(死锁)

    在“上海大学操作系统实验二(死锁)”中,学生将深入研究死锁产生的原因、条件以及避免和解除死锁的方法。 死锁的四个必要条件包括: 1. **互斥条件**:某些资源一次只能被一个进程使用,即资源在一段时间内非...

    操作系统银行家算法避免死锁

    银行家算法避免死锁 VM软件 Linux系统 C语言 成功编译 成功运行 内附完整课设报告,代码,运行cpp 附有哲学家进餐简略一题 原课设要求:死锁避免 (1)请设计一个程序演示死锁避免算法(银行家算法)。 (2)要求该...

    oracle死锁原因解决办法

    ### Oracle死锁原因及解决办法 #### 一、Oracle死锁概述 在Oracle数据库系统中,死锁是一种常见的并发问题,它会导致多个事务之间互相等待对方释放资源而无法继续执行,最终导致整个系统的运行效率降低甚至停滞。...

    通过SQL Server Profiler来监视分析死锁

    在SQL Server数据库管理中,死锁是一个常见的性能问题,它发生在两个或多个事务相互等待对方释放资源时。本文将深入探讨如何使用SQL Server Profiler工具来监视和分析死锁,以便更好地理解和解决这类问题。 首先,...

Global site tag (gtag.js) - Google Analytics