`

多线程之线程死锁

 
阅读更多

1.何为线程死锁?

 当出现多个线程相互等待均不执行时就是线程死锁

2死锁出现在哪?

开发中一定要避免线程死锁,死锁经常出现在synchronized代码嵌套操作中
 3.如何避免死锁?
 
不这样做就行了

package Lock2;
/**
 * 线程死锁
 * @author zhang
 * 
 *
 */
public class Demo01_DeadLock {
	public static final Object LOCK1=new Object();
	public static final Object LOCK2=new Object();
	public static void main(String[] args) {
		MyDeadLock deadLock1 = new MyDeadLock(true);
		MyDeadLock deadLock2 = new MyDeadLock(false);
		deadLock1.start();
		deadLock2.start();
		
	}
}

 

package Lock2;
/**
 * 死锁代码
 * @author zhang
 *
 */
public class MyDeadLock extends Thread{
	boolean flag;//定义标记,用来指定要执行的代码

	public MyDeadLock(boolean flag) {
		this.flag = flag;
	}

	@Override
	public void run() {
		if(flag){//flag赋值为true时,执行的代码		
			synchronized(Demo01_DeadLock.LOCK1){
				System.out.println("if中锁1");
				synchronized(Demo01_DeadLock.LOCK2){
					System.out.println("if中锁2");
				}
			}
		}else{//flag赋值为flase时,执行的代码	
			synchronized(Demo01_DeadLock.LOCK2){
				System.out.println("else中锁2");
				synchronized(Demo01_DeadLock.LOCK1){
					System.out.println("else中锁1");
				}
			}
		}
	}
	
}

 

分享到:
评论

相关推荐

    多线程死锁

    明白死锁产生的原因,在程序中演示死锁产生并从而实现多线程陈旭解决死锁(deadlock)这一类问题。

    java多线程死锁预防机制研究

    多线程能够显著提高程序的执行效率,但也随之带来了诸如死锁等问题。死锁是指两个或多个线程在执行过程中,由于竞争资源或者彼此等待对方持有的资源而导致所有线程都无法继续执行的现象。本文旨在探讨Java多线程环境...

    线程死锁的例子

    线程死锁是多线程编程中一个严重的问题,它发生在两个或多个线程相互等待对方释放资源,导致它们都无法继续执行。这个概念在计算机科学中尤为重要,因为并发执行是提高系统性能的关键手段,但如果不妥善处理,死锁...

    多线程死锁问题

    在Java多线程编程中,死锁是一个非常重要的概念,也是开发者需要密切关注和避免的问题。死锁是指两个或多个线程互相等待对方释放资源,从而导致它们都无法继续执行的状态。这种情况通常发生在并发环境中,当线程间的...

    c++多线程死锁检测

    一个简单有效的即时检测线程死锁的方法(附c++源代码) 原文链接:https://blog.csdn.net/liaozhilong88/article/details/80354414 原链接是windows下实现,这份代码以pthread简单实现跨平台 感谢原博主分享

    进程线程及死锁

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

    关于在类的构造函数和析构使用临界区函数导致的多线程死锁的一个经验之谈

    多线程死锁的危险 - 临界区函数的不当使用 在多线程编程中,临界区函数的使用是非常重要的。然而,许多开发者却忽视了临界区函数的正确使用方法,导致了多线程死锁的出现。本文将讲述一个关于在类的构造函数和析构...

    DllMain和多线程死锁[归类].pdf

    DllMain 和多线程死锁 DllMain 是可选择的 DLL 入口指针,当进程和线程启动和终止时被系统调用,分别进行创建资源和释放资源等操作。在 DllMain 中创建线程或结束线程时,都特别要注意一个规则,那就是 DllMain 的...

    Linux系统线程死锁实验报告.pdf

    根据提供的文件内容,本篇报告主要涉及在Linux环境下通过C语言编程实现线程死锁的实验。报告中包含了一段实验代码,以及实验的基本框架和实验过程。下面详细解释报告中的知识点: 1. Linux系统与C语言编程: Linux...

    实测有效的一个c++检测线程死锁的解决方法(实现和测试代码)

    实测有效的一个c++检测线程死锁的解决方法(实现和测试代码) 原创实测有效的一个c++检测线程死锁的解决方法,已应用于项目,实测有效 原创文章地址:https://blog.csdn.net/liaozhilong88/article/details/80354414...

    java模拟线程死锁

    在 Java 中,线程死锁(Deadlock)是一种特殊的情况,发生在两个或多个线程之间的互相等待对方释放资源的状态。这种情况下,各个线程都在等待其他线程释放资源,而自己也占用着其他线程需要的资源,从而导致所有线程...

    DllMain和多线程死锁 问题

    DllMain和多线程死锁问题 DllMain是Windows操作系统中的动态链接库(DLL)入口点,当进程和线程启动和终止时被系统调用,分别进行创建资源和释放资源等操作。在DllMain中创建线程或终止线程时,如果违背了DllMain的...

    多线程死锁,活锁,竞争锁问题总结

    - 活锁不同于死锁之处在于,处于活锁状态下的线程并不是互相等待对方释放资源,而是不断地尝试并失败。 **解决方法:** - **随机化**:为每个线程分配一个随机延迟时间再尝试执行操作,减少同时尝试的概率。 - **...

    线程死锁示例

    本资源为多线程中,多线程共享资源,出现死锁的情况。浅显易懂

    基于java的开发源码-多线程程序死锁检查 JCarder.zip

    基于java的开发源码-多线程程序死锁检查 JCarder.zip 基于java的开发源码-多线程程序死锁检查 JCarder.zip 基于java的开发源码-多线程程序死锁检查 JCarder.zip 基于java的开发源码-多线程程序死锁检查 JCarder.zip ...

    QT中sqlite多线程操作4个注意问题

    然而,当在多线程环境中使用SQLite时,需要注意一些关键问题以确保数据的安全性和一致性。以下是四个重要的考虑因素: 1. **线程安全**: SQLite本身并不提供完全的线程安全,这意味着在不同线程中并发访问数据库...

    java的hashMap多线程并发情况下扩容产生的死锁问题解决.docx

    在Java的HashMap中,多线程并发环境下的扩容操作可能会引发死锁问题。这主要发生在JDK 1.7版本,因为其扩容机制采用了头插法。以下详细解释这个问题及其解决方案。 首先,HashMap的扩容机制是在容量达到阈值时触发...

    易语言多线程传递多参数

    在编程领域,多线程是实现并发执行任务的重要机制,特别是在易语言中,它能有效提升程序的执行效率。易语言是一种中文编程语言,旨在降低编程门槛,让普通用户也能进行程序开发。本文将深入探讨易语言中的多线程以及...

    0708-极智开发-解读多线程之死锁分享

    0708_极智开发_解读多线程之死锁分享

Global site tag (gtag.js) - Google Analytics