在java中,死锁可以很容易用如下代码来模拟
package jdk8; public class Deadlock { public static void main (String args[]){ final Object objA = new Object(); final Object objB = new Object(); new Thread() { public void run (){ while (1==1) { System.out.println ("Thread A synchronizing on objA"); synchronized (objA){ System.out.println ("Thread A synchronized on objA"); System.out.println ("Thread A synchronizing on objB"); synchronized (objB){ System.out.println ("Thread A synchronized on objB"); } } } } }.start(); new Thread() { public void run (){ while (1==1) { System.out.println ("Thread B synchronizing on objB"); synchronized (objB){ System.out.println ("Thread B synchronized on objB"); System.out.println ("Thread B synchronizing on objA"); synchronized (objA){ System.out.println ("Thread B synchronized on objA"); } } } } }.start(); } }
另外java中的synchronized关键字和ReentrantLock都是实现了可重入锁的机制,如下
public synchronized void functionOne() { // do something functionTwo(); synchronized(this) { // do more stuff } } public synchronized void functionTwo() { // do even more stuff! }
如果synchronized没有可重入锁的机制的话,当某线程访问了functionOne的时候,此线程已经得到了当前对象的monitor,如果没有可以重入锁的机制,这个时候他去访问functionTwo又会尝试获取当前对象的monitor,结果就会是死锁
相关推荐
java锁机制Synchronized java锁机制Synchronized java锁机制Synchronized java锁机制Synchronized
java代码-证明synchronized可重入锁
java锁机制Synchronized.pdf
lock锁,lock锁和synchronized的对比 # Lock锁 JDK5.0后Java提供了一种更加强大的线程同步机制。一种显式定义同步锁对象来实现锁,提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问...
声明周期,旦置为nil之后就法做代码同步了。SyncData* data = id2data(obj, RELEASE);}}// @synchronized
java锁机制Synchronized[归纳].pdf
由于对象头的信息是与对象自身定义的数据没有关系的额外存储成本,因此考虑到JVM的空间效率,Mark Word 被设计成为一个非固定的数据结构,以便存储更多有效的数据,它会根据对象本身的状态复用自己的存储空间,如32...
java锁机制Synchronized参考.pdf
主要介绍了Java 同步锁(synchronized)详解及实例的相关资料,需要的朋友可以参考下
基于Synchronized加锁的四个demo,主要反映类锁、对象锁、方法锁的使用方法。 并测试不同类型锁之间的有效关系。
可重入锁 公平锁 / 非公平锁 Synchronized / Lock 线程通讯 wait()、notify()和notifyAll() 虚假唤醒 Condition 定制化通信 多线程锁 并发下的集合类 List Set Map Callable接口 线程创建的方式 callable / runnable...
Synchronized锁在Spring事务管理下,导致线程不安全。
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
其次,从功能特性上来看,synchronized具有可重入性,即同一个线程可以多次获取同一个对象的锁,而不会导致死锁。而Lock接口也提供了可重入锁的实现。此外,Lock接口还提供了更灵活的锁获取方式,如可以尝试获取锁...
2、可重入锁与 Synchronized 的其他特性 3、ThreadLocal 的底层实现与使用 4、ReentrantLock底层实现和如何使用 5、Condition源码分析 6、ReentrantReadWriteLock底层实现原理 7、并发工具类CountDownLatch 、...
在JAVA中ReentrantLock 和synchronized 都是可重入锁; 重入锁ReentrantLock 相对来说是synchronized、Object.wait()和Object.notify()方法的替代品(或者说是增强版),在JDK5.0的早期版本,重入锁的性能远远好于...