Semaphore替换多线程synchronized解决并发环境死锁,Java
import java.util.concurrent.Semaphore; public class MainClass { private Semaphore semaphore1 = new Semaphore(1); private Semaphore semaphore2 = new Semaphore(1); public static void main(String[] args) { MainClass mainClass = new MainClass(); mainClass.demo(); } private void demo() { Thread ta = new Thread(new DeadA()); Thread tb = new Thread(new DeadB()); ta.start(); tb.start(); } private class DeadA implements Runnable { private String id = "A"; @Override public void run() { System.out.println(id + " 申请锁1..."); try { semaphore1.acquire(); } catch (InterruptedException e) { throw new RuntimeException(e); } System.out.println(id + " 获得锁1"); semaphore1.release(); System.out.println(id + " 申请锁2..."); try { semaphore2.acquire(); } catch (InterruptedException e) { throw new RuntimeException(e); } System.out.println(id + "获得锁2"); semaphore2.release(); System.out.println(id + " 运行结束"); } } private class DeadB implements Runnable { private String id = "B"; @Override public void run() { System.out.println(id + " 申请锁2..."); try { semaphore2.acquire(); } catch (InterruptedException e) { throw new RuntimeException(e); } System.out.println(id + " 获得锁2"); semaphore2.release(); System.out.println(id + " 申请锁1..."); try { semaphore1.acquire(); } catch (InterruptedException e) { throw new RuntimeException(e); } System.out.println(id + " 获得锁1"); semaphore1.release(); System.out.println(id + " 运行结束"); } } }
输出:
A 申请锁1...
B 申请锁2...
A 获得锁1
B 获得锁2
A 申请锁2...
B 申请锁1...
A获得锁2
B 获得锁1
A 运行结束
B 运行结束
Java多线程并发环境下的synchronized死锁实例_zhangphil的博客-CSDN博客Java并发多线程环境中,造成死锁的最简单的场景是:多线程中的一个线程T_A持有锁L1并且申请试图获得锁L2,而多线程中另外一个线程T_B持有锁L2并且试图申请获得锁L1。线程的锁申请操作是阻塞的,于是造成线程T_A和线程T_B无法正确获得想要的锁,两个线程被阻塞进入死锁状态。https://blog.csdn.net/zhangphil/article/details/127534524
新Java线程Semaphore:并行环境下访问竞争资源控制_zhangphil的博客-CSDN博客新Java线程Semaphore:并行环境下访问竞争资源控制Semaphore是从Java 1.5引入的Java线程新内容。Semaphore实现在线程的竞争资源访问环境下,对资源的访问控制。只有申请(acquire)得到Semaphore的许可证的线程任务可以访问竞争资源。例如: private void test() { // 虽然有很多线程想访问某些资源,但...https://blog.csdn.net/zhangphil/article/details/83410270