zoukankan      html  css  js  c++  java
  • 2.并发编程挑战-死算

     返回主目录

     com.qdb.thinkv.thread

    package com.qdb.thinkv.thread;
    /**
     * 死锁是指两个或两个以上的进程在执行过程中,
     * 由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,
     * 若无外力作用,它们都将无法推进下去。
     * 此时称系统处于死锁状态或系统产生了死锁,
     * 这些永远在互相等待的进程称为死锁进程
     * 
     * 思考如何避免死锁
     * @author gengyunchong
     *
     */
    public class DeadLockDemo {
        private static String A="A";
        private static String B="B";
        
        public static void main(String[] args) {
            new DeadLockDemo().deadLock();
        }
        
        private void deadLock(){
            Thread t1=new Thread(new Runnable(){
    
                public void run() {
                    synchronized (A) {
                        try {
                            Thread.currentThread().sleep(2000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        synchronized (B) {
                            System.out.println("1");
                        }
                    }
                }
                
            });
            
            Thread t2=new Thread(new Runnable(){
                public void run() {
                    synchronized (B) {
                        
                        synchronized (A) {
                            System.out.println("2");
                        }
                    }
                }
            });
            
            t1.start();
            t2.start();
        }
    }

    避免死锁的几种方式

    1.避免一个线程同时获取多个锁。

    2.避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源。

    3.尝试使用定时锁。使用lock.tryLock(time out)来替换使用内部锁机制。

    4.对于数据库,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败的情况。

  • 相关阅读:
    Intellij中的常用快捷键
    Intelij 中javax.servlet.http.HttpServlet包导不进来
    JDBC工具类与数据库建立连接
    Xms Xmx PermSize MaxPermSize 区别
    图书管理系统(SSH)
    DAO
    spring中的bean
    Intellij页面汉字乱码问题
    Dispatcher initialization failed
    用同一个类对不同表进行访问
  • 原文地址:https://www.cnblogs.com/tianzhiyun/p/9129182.html
Copyright © 2011-2022 走看看