死锁"/>
多线程 死锁
嵌套锁。
两个线程调用的同步代码中有嵌套锁。
一个线程的内层锁在另外一个线程的外部锁,一个线程的外部锁在另外一个线程的内部锁,
A已经获得读锁,B已经获得写锁 A再去获取写锁,B再去获取读锁,读写锁都被另一个线程持有,方法不能继续向下执行,一直处于阻塞状态;
public class DeadLock {private final Object MUTEX_READ = new Object();private final Object MUTEX_WRITE = new Object();public void read() {synchronized (MUTEX_READ) {System.out.println(Thread.currentThread() + " GET WRITE LOCK");synchronized (MUTEX_WRITE) {System.out.println(Thread.currentThread() + " GET READ LOCK");System.out.println("I am reading a bull shit, you mother fucker!");}System.out.println(Thread.currentThread() + " RELEASE READ LOCK");}System.out.println(Thread.currentThread() + " RELEASE WRITE LOCK");}public void write() {synchronized (MUTEX_WRITE) {System.out.println(Thread.currentThread() + " GET READ LOCK");synchronized (MUTEX_READ) {System.out.println(Thread.currentThread() + " GET WRITE LOCK");}System.out.println(Thread.currentThread() + " RELEASE WRITE LOCK");}System.out.println(Thread.currentThread() + " RELEASE READ LOCK");}public static void main(String[] args) {final DeadLock deadLock = new DeadLock();for (int i = 0; i < 20; i++) {new Thread(deadLock::read).start();new Thread(deadLock::write).start();}}
}
package phase1.chapter4;import java.util.HashMap;
import java.util.Map;/*** @classname: HashMapDeadLock* @description:另外一个死锁现象,会搞死机!!!!!! 慎重运行!!!!!!!*/
public class HashMapDeadLock {private final Map<String, String> map = new HashMap<>();//写方法public void put(String key, String value) {this.map.put(key, value);}public static void main(String[] args) {final HashMapDeadLock lock = new HashMapDeadLock();//10个线程运行写方法,会造成死锁for (int x = 0; x < 10; x++) {new Thread(() -> {for (int i = 0; i < Integer.MAX_VALUE; i++) {lock.put(String.valueOf(i), String.valueOf(i));}}).start();}}
}
更多推荐
多线程 死锁
发布评论