• Home
  • Archives
  • About
  非著名Java程序员
  • Home
  • Archives
  • About
  • rust
  • redis
  • dubbo
  • RocketMQ
  • kubernetes
  • Java并发编程的艺术
  • 网络协议
  • JVM
  • Java
  • MySQL
  • Docker
  • Spring
  • GO
  • AI

Java写一个死锁

public class DeadLockDemo {

	private static String A = "A";
	private static String B = "B";


	private void deadLock(){
		Thread  t1 = new Thread(new Runnable() {
			@Override
			public void run() {
				synchronized (A){
					try {
						Thread.currentThread().sleep(2000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					synchronized (B){
						System.out.println("t1");
					}
				}
			}
		});

		Thread  t2 = new Thread(new Runnable() {
			@Override
			public void run() {
				synchronized (B){
					synchronized (A){
						System.out.println("t2");
					}
				}
			}
		});

		t1.start();
		t2.start();
	}

	public static void main(String[] args) {
		new DeadLockDemo().deadLock();
	}
}

操作系统中,死锁发生的四个条件:

  1. 互斥条件
    一个资源每次只能被一个进程使用

  2. 占有且等待
    一个进程因请求资源而阻塞时,对已获得的资源保持不放

  3. 不可强行占有
    进程已获得的资源,在未使用完成之前,不能强行剥夺

  4. 循环等待
    进程之间形成一种头尾相接的循环等待资源关系

2020/11/24 10:04 上午 posted in  Java并发编程的艺术

« Prev Page

非著名Java程序员

Java Developer 准备转行 Rust
GitHub RSS

公众号

Categories

rust redis dubbo RocketMQ kubernetes Java并发编程的艺术 网络协议 JVM Java MySQL Docker Spring GO AI

Recent Posts

  • 记一次公众号菜单配置
  • Rust web 开发-8.docker
  • Rust web 开发-7.redis
  • Rust web 开发-6.kafka
  • Rust web 开发-5.线程池

Copyright © 2015 Powered by MWeb,  Theme used GitHub CSS.