2020.02.15 线程死锁问题

package com.guoyun.ThreadTest;

/**
* ClassName:.
* Function: ADD FUNCTION
* Reason: ADD REASON
*
* @author
* @Date
* @since Ver 1.1
*/
public class DeadLockDemo {
public static void main(String[] args) {
new DeadLock("张三").start();
new DeadLock("李四").start();

}
}
class DeadLock extends Thread{
public DeadLock(String name) {
super(name);
}

@Override
public void run() {
if ( "张三".equals(Thread.currentThread().getName())) {
synchronized ("遥控器"){
System.out.println("张三拿到了遥控器,准备去拿电池");
synchronized ("电池"){
System.out.println("张三拿到了遥控器和电池,可以开空调了");
}
}

}else if ( "李四".equals(Thread.currentThread().getName())){
synchronized ("电池"){
System.out.println("李四拿到了电池,准备去拿遥控器");
synchronized ("遥控器"){
System.out.println("李四拿到了遥控器和电池,可以开空调了");
}
}
}
}
}

原文地址:https://www.cnblogs.com/aojie/p/12311939.html

时间: 2024-11-09 04:07:43

2020.02.15 线程死锁问题的相关文章

2020/02/15 理解图论中的拉普拉斯算子与拉普拉斯矩阵

学习资料 知乎-[其实贼简单]拉普拉斯算子和拉普拉斯矩阵 CSDN-我见过最清晰的–理解梯度,散度,旋度 原文地址:https://www.cnblogs.com/Research-XiaoEMo/p/12311268.html

线程系列08,实现线程锁的各种方式,使用lock,Montor,Mutex,Semaphore以及线程死锁

当涉及到多线程共享数据,需要数据同步的时候,就可以考虑使用线程锁了.本篇体验线程锁的各种用法以及线程死锁.主要包括: ※ 使用lock处理数据同步※ 使用Monitor.Enter和Monitor.Exit处理数据同步※ 使用Mutex处理进程间数据同步※ 使用Semaphore处理数据同步※ 线程死锁 □ 使用lock处理数据同步 假设有一个类,主要用来计算该类2个字段的商,在计算商的方法之内让被除数自减,即被除数有可能为零.使用lock语句块保证每次只有一个线程进入该方法. class Th

线程死锁

所谓的线程死锁,是指在多线程运行的过程中,线程1拥有锁a,而需要锁b来继续执行, 而此时,线程2拥有锁b而需要锁a来继续执行,那么此时会形成死锁,两个线程会同时等待. 在编程的过程中应尽量的避免线程死锁. 有时在面试中会要求写出一个死锁的程序演示,如下: 1 //写一个死锁程序 2 public class DeadLock { 3 //主程序执行 4 public static void main(String[] args) { 5 Thread thread1 = new Thread(n

线程-死锁

有多个线程执行的程序中,某个线程t1需要锁住两个对象obj1和obj2才能完成任务,而线程t2也需要锁住这两个对象,t1首先锁住obj1,t2首先锁住obj2,t1需要等待t2将obj2的锁放开,而t2也需要等待t1将obj1放开才能执行完,此时便进入了死锁状态. 死锁演示程序如下: 1 public class TestDeadLock implements Runnable 2 { 3 public int flag = 1; 4 static Object o1 = new Object(

并发编程 15—— 线程池 之 原理二

Java并发编程实践 目录 并发编程 01—— ConcurrentHashMap 并发编程 02—— 阻塞队列和生产者-消费者模式 并发编程 03—— 闭锁CountDownLatch 与 栅栏CyclicBarrier 并发编程 04—— Callable和Future 并发编程 05—— CompletionService : Executor 和 BlockingQueue 并发编程 06—— 任务取消 并发编程 07—— 任务取消 之 中断 并发编程 08—— 任务取消 之 停止基于线

在Linux下线程死锁的四个条件

一.死锁的原因和必要条件 1.死锁的概念 一般情况下,如果同一个线程先后两次调用lock,在第一次调用时,由于锁已经被占,该线程会挂起等待别的线程释放锁,然而锁正是被自己占着的,该线程又被挂起,没有机会释放锁,因此,就永远处于挂起等待状态了,这叫做死锁(Deadlock).另种典型的死锁情形是这样:线程A获 得了锁1,线程B获得了锁2,这时线程A调用lock试图获得锁2,结果是需要挂起等待线程B释放锁2,而这时线程B也调用lock试图获得锁1,结果是需要挂起等待线程A释放锁1,于是线程A和B都永

Java笔记六.线程同步、线程死锁

线程同步.线程死锁 在上一篇文章中,有一个模拟售卖火车票系统,在卖车票的程序代码中,极有可能碰到一种意外,就是同一张票号被打印两次多次,也可能出现打印出0甚至负数的票号.具体表现为:假设tickets的值为1的时候,线程1刚执行完if(tickets>0)这行代码,正准备执行下面的代码,就在这时,操作系统将CPU切换到了线程2上执行,此时tickets的值仍为1,线程2执行完上面两行代码,tickets的值变为0后,CPU又切回到了线程1上执行,线程1不会再执行if(tickets>0)这行代

JAVA笔记14__多线程共享数据(同步)/ 线程死锁 /

/** * 多线程共享数据 * 线程同步:多个线程在同一个时间段只能有一个线程执行其指定代码,其他线程要等待此线程完成之后才可以继续执行. * 多线程共享数据的安全问题,使用同步解决. * 线程同步两种方法: * 1.同步代码块 * synchronized(要同步的对象){ 要同步的操作 } * 2.同步方法 * public synchronized void method(){ 要同步的操作 } */ public class Main { public static void main(

atitit.线程死锁 卡住无反应 的原因in cmd调用的解决方案  v3 q39

atitit.线程死锁 卡住无反应 的原因in cmd调用的解决方案  v3 q39 1. 问题::线程死锁  卡住无反应1 1.1. 分类:: cmd调用,  net io  , file  io 调用, multi thread调用same var的时候儿..1 1.2. 原因readLine()是阻塞方法1 1.3. 调用same var1 2. 解决之道::2 2.1. 使用了cmd /k走死锁兰...改成个/c佐ok兰..2 2.2. Watchdog2 3. Ref3 1. 问题::