• java多线程之死锁


    死锁在并发编程中是需要避免的,要修正死锁问题,必须明白死锁发生的条件:

    1.互斥条件:

    任务中使用的资源至少有一个是不能共享的

    2.请求与保持条件:

    一个进程因请求资源而阻塞时,对已获得的资源保持不放。 

    3.不剥夺条件:

    进程已获得的资源,在末使用完之前,不能强行剥夺。 

    4.循环等待条件:

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

    下面我们着手实现一个死锁:

    public class DeadThread implements Runnable {
        public String username;
        public Object lock1=new Object();
        public Object lock2=new Object();
        public void setFlag(String username){
            this.username=username;
        }
        @Override
        public void run() {
            if(username.equals("a")){
                synchronized (lock1){
                    try {
                        System.out.println("username="+username);
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
    
                    synchronized (lock2){
                        System.out.println("按lock1->lock2顺序执行了");
                    }
                }
            }
    
            if(username.equals("b")){
                synchronized (lock2){
                    try {
                        System.out.println("username="+username);
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
    
                    synchronized (lock1){
                        System.out.println("按lock2->lock1顺序执行了");
                    }
                }
            }
        }
    }
    
    public class Run {
        public static void main(String[] args) {
            DeadThread d1=new DeadThread();
            d1.setFlag("a");
            Thread t1=new Thread(d1);
            t1.start();
    
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    
            d1.setFlag("b");
            Thread t2 = new Thread(d1);
            t2.start();
        }
    }
  • 相关阅读:
    HTML页面保存为图片
    一些chrome调试
    hooks使用的一些注意点
    React(v16.8) Hooks 简析
    基于 React.js 和 Node.js 的 SSR 实现方案
    移动端垂直居中对齐
    python XML ElementTree的增删改查
    python实现XML解析的三种方法
    git的用法
    Appium获取元素的方式
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/9293992.html
Copyright © 2020-2023  润新知