Synchronize死锁

双方互相持有,对方的锁
导致,程序无法继续执行

package com.bjsxt.base.sync006;/*** 死锁问题,在设计程序时就应该避免双方相互持有对方的锁的情况**/
public class DeadLock implements Runnable {private String tag;private static Object lock1 = new Object();private static Object lock2 = new Object();public void setTag(String tag) {this.tag = tag;}@Overridepublic void run() {if (tag.equals("a")) {synchronized (lock1) {try {System.out.println("当前线程 : " + Thread.currentThread().getName() + " 进入lock1执行");Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}synchronized (lock2) {System.out.println("当前线程 : " + Thread.currentThread().getName() + " 进入lock2执行");}}}if (tag.equals("b")) {synchronized (lock2) {try {System.out.println("当前线程 : " + Thread.currentThread().getName() + " 进入lock2执行");Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}synchronized (lock1) {System.out.println("当前线程 : " + Thread.currentThread().getName() + " 进入lock1执行");}}}}public static void main(String[] args) {DeadLock d1 = new DeadLock();d1.setTag("a");DeadLock d2 = new DeadLock();d2.setTag("b");Thread t1 = new Thread(d1, "t1");Thread t2 = new Thread(d2, "t2");t1.start();try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}t2.start();}}

运行

Synchronize死锁相关推荐

  1. java中关于死锁的概念和实例操作

    关于synchronize死锁的例子和避免死锁的例子 产生死锁的原因主要是: (1) 因为系统资源不足. (2) 进程运行推进的顺序不合适. (3) 资源分配不当等. 产生死锁的四个必要条件: (1) ...

  2. java并发,同步synchronize和lock锁的使用方法和注意,死锁案例分析

    1.什么是线程安全问题 多个线程同时共享同一个全局变量或者静态变量的时候,某个线程的写操作,可能会影响到其他线程操作这个变量.所有线程读一个变量不会产生线程安全问题. 实际场景就是火车站买票问题:剩余 ...

  3. 多线程:synchronize、volatile、Lock 的区别与用法

    Java多线程之内存可见性和原子性:Synchronized和Volatile的比较 在说明Java多线程内存可见性之前,先来简单了解一下Java内存模型. (1)Java所有变量都存储在主内存中   ...

  4. Synchronize和Lock 的区别与用法

    synchronized和lock的用法区别 synchronized:在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象. lock ...

  5. java的死锁是什么意思_Java面试题:什么是死锁?如何手写一个死锁(Dead Lock)...

    要想实现一个死锁,首先要明白什么是死锁,我们看一下死锁的定义: 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称 ...

  6. 深入研究 Java Synchronize 和 Lock 的区别与用法

    在分布式开发中,锁是线程控制的重要途径.Java为此也提供了2种锁机制,synchronized和lock.做为Java爱好者,自然少不了对比一下这2种机制,也能从中学到些分布式开发需要注意的地方. ...

  7. Synchronize和ReentrantLock区别

    2019独角兽企业重金招聘Python工程师标准>>> 目录介绍 1.Synchronize和ReentrantLock区别 1.1 相似点 1.2 区别 1.3 什么是线程安全问题 ...

  8. Java 编程下的并发线程之间的同步代码块死锁

    并发线程之间的死锁通常发生在同步代码块的相互嵌套使用的过程中,下面先来看段代码: package cn.sunzn.synchronize;public class DeadLock {public ...

  9. Delphi中线程类TThread实现多线程编程2---事件、临界区、Synchronize、WaitFor……

    接着上文介绍TThread. 现在开始说明 Synchronize和WaitFor 但是在介绍这两个函数之前,需要先介绍另外两个线程同步技术:事件和临界区 事件(Event) 事件(Event)与De ...

最新文章

  1. 自动创建阿里云抢占式实例
  2. Ant Design Pro 使用图表 charts bizcharts
  3. Mui.ajax请求服务器正确返回json数据格式
  4. OpenGL Blinn-Phong Shader实例
  5. 浅入深出之Java集合框架(上)
  6. Spring 3.1缓存和配置
  7. 服务器可以装2个系统吗,云服务器可以装多个系统吗
  8. SAP License:关于MRP产生的采购申请检查、与采购部的衔接处理
  9. DHTML Scriptlets 容器对象参考手册
  10. 这几个概念你可能还是没搞清require、import和export
  11. windows操作系统_windows下用深度系统安装器安装深度操作系统实现双系统分别运行...
  12. 自己动手写操作系统(五)
  13. 论开学第二个月干了点啥
  14. CentOS6 配置 yum 阿里源
  15. 深扒联易融招股书:毛利率高、研发占比低,近三年合计亏约30亿
  16. 网络空间安全是否有必要考研
  17. [KALI] 新装KALI自动化配置
  18. SQL集合函数中利用case when then技巧
  19. mysql登录密码特殊字符_MySQL用户密码中的特殊字符叹号(!)的妙用
  20. 接口自动化环境搭建-Python Request + Unittest

热门文章

  1. vue2.0+wechat
  2. mybatis 动态 SQL
  3. C#线程同步(1)- 临界区&Lock
  4. Windows下配置单机Hadoop环境
  5. 初玩树莓派所遇见的坑
  6. EOS 智能合约源代码解读 (6)合约之action
  7. (chap6 Http首部) 报文首部
  8. C++ Primer 5th笔记(chap 12 动态内存)weak_ptr
  9. GO语言实现文件的断点续传
  10. 基于Warshall算法的连通图及欧拉图判定方法