- package cn.itcast.thread;
- /*
- * 死锁的案例
- */
- class Dead implements Runnable{
- private boolean flag;
- Dead(boolean flag){this.flag = flag;}
- public void run(){
- while(true){
- //如果flag = true线程进入A同步代码块,进B同步代码块
- if(flag){
- synchronized(LockA.locka){
- System.out.println("if..locka");
- //进B同步代码块
- synchronized(LockB.lockb){
- System.out.println("if..lockb");
- }
- }
- }else{
- //如果flag = false 线程进入B同步代码块,进入A同步代码块
- synchronized(LockB.lockb){
- System.out.println("else..lockb");
- //进A同步代码块
- synchronized(LockA.locka){
- System.out.println("else..locka");
- }
- }
- }
- }
- }
- }
- public class ThreadDemo5 {
- public static void main(String[] args) {
- Dead d1 = new Dead(true);//线程进入A代码块
- Dead d2 = new Dead(false);//线程进入B代码块
- Thread t1 = new Thread(d1);
- Thread t2 = new Thread(d2);
- t1.start();
- t2.start();
- }
- }
- //定义两个锁,A锁,B锁,唯一对象
- class LockA{
- public static final LockA locka = new LockA();
- }
- class LockB{
- public static final LockB lockb = new LockB();
- }
复制代码 .死锁
多线程在争抢同一把锁的时候,造成的程序的假死现象。实际的开发中不可能出现,但是面试的时候很大的概率会遇到这样的问题。而且需要手写代码出来。给大家分享下关于死锁的代码。希望能够让大家有个印象。
|