多线程——同步嵌套造成死锁问题

来源:互联网 发布:备案域名可以不注销吗 编辑:程序博客网 时间:2024/05/16 11:59
package com.qianfeng.demo02;/** * 同步的另外一个弊端:死锁 *  * 最常见的死锁的情况: * 同步嵌套,同步中还有同步,然后两个同步用的不是一把锁。 *  * 不是使用死锁,而是避免死锁。 *  * 尽量避免同步嵌套的情况。 * */public class DeadLockDemo01 {public static void main(String[] args) {SaleTicket st = new SaleTicket();Thread t0 = new Thread(st);Thread t1 = new Thread(st);t0.start();try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}st.setFlag(false);t1.start();}}class SaleTicket implements Runnable{private int num = 100;Object obj = new Object();private boolean flag = true;public void setFlag(boolean flag) {this.flag = flag;}public boolean isFlag() {return flag;}@Overridepublic void run() {if (flag) {while (true) {synchronized (obj) {show();}}}else {while (true) {show();       //出现同步的嵌套,可能会产生死锁}}}public synchronized void show(){synchronized (obj) {if (num>0) {try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"...sale.."+num--);}}}}

0 1
原创粉丝点击