Java多线程死锁情况模拟

6 篇文章 0 订阅
4 篇文章 0 订阅
package com.itmayiedu;

class DemoThread implements Runnable {
	private int count = 1000;
	private Object obj = new Object();
	public boolean flag = true;

	@Override
	public void run() {
		// 锁(同步代码块)在什么时候释放? 代码执行完, 自动释放锁.
		// 如果flag为true 先拿到 obj锁,在拿到this 锁、 才能执行。
		// 如果flag为false先拿到this,在拿到obj锁,才能执行。
		// 死锁解决办法:不要在同步中嵌套同步。
		if (flag) {
			while (true) {
				synchronized (obj) {
					show();
				}
			}

		} else {
			while (true) {
				show();
			}
		}

	}

	public synchronized void show() {
		synchronized (obj) {
			if (count > 0) {
				try {
					Thread.sleep(40);
				} catch (Exception e) {

				}
				System.out.println(Thread.currentThread().getName() + "--show--" + count--);
			}
		}

	}

}

public class Test {

	public static void main(String[] args) throws InterruptedException {
		DemoThread demoThread = new DemoThread();
		Thread thread1 = new Thread(demoThread);
		Thread thread2 = new Thread(demoThread);
		thread1.start();
		Thread.sleep(40);
		demoThread.flag = false;
		thread2.start();
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值