image.png
    image.png

    1. package com.pln.syn;
    2. public class DeadLock {
    3. public static void main(String[] args) {
    4. MakeUp g1 = new MakeUp(0,"小明");
    5. MakeUp g2 = new MakeUp(1,"小宏");
    6. g1.start();
    7. g2.start();
    8. }
    9. }
    10. //口红
    11. class Lipstick{
    12. }
    13. //镜子
    14. class Mirror{
    15. }
    16. class MakeUp extends Thread{
    17. // 需要的资源只有一份,用statie来保证只有一份
    18. static Lipstick lipstick = new Lipstick();
    19. static Mirror mirror = new Mirror();
    20. int choose;//选择
    21. String girlName;//使用化妆品的人
    22. MakeUp(int choose,String girlName){
    23. this.choose = choose;
    24. this.girlName = girlName;
    25. }
    26. public void run(){
    27. // 化妆
    28. try {
    29. makeup();
    30. } catch (InterruptedException e) {
    31. e.printStackTrace();
    32. }
    33. }
    34. // 化妆,互相持有对方的锁,就需要拿到对方的资源
    35. private void makeup() throws InterruptedException {
    36. if (choose==0){
    37. synchronized (lipstick){ //获得口红的锁
    38. System.out.println(girlName+"获得口红的锁");
    39. Thread.sleep(1000);
    40. }
    41. synchronized (mirror){ //获得镜子的锁
    42. System.out.println(girlName+"获得镜子的锁");
    43. }
    44. }else{
    45. synchronized (mirror){ //获得镜子的锁
    46. System.out.println(girlName+"获得镜子的锁");
    47. Thread.sleep(2000);
    48. }
    49. synchronized (lipstick){ //获得口红的锁
    50. System.out.println(girlName+"获得口红的锁");
    51. }
    52. }
    53. }
    54. }

    image.png