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.对于数据库,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败的情况。

  • 相关阅读:
    一、代码风格
    Nginx之Eclipse开发环境配置
    Linux之tail命令实时收集[纠正误解]
    Java之"Mozilla Rhino"引擎(二)
    linux之tail -F命令异常file truncated
    Java之nio性能比较
    Java之nio MappedByteBuffer的资源释放问题
    Java之java.lang.IllegalMonitorStateException
    Java之线程池管理
    Java之NIO传输数据
  • 原文地址:https://www.cnblogs.com/tianzhiyun/p/9129182.html
Copyright © 2011-2022 走看看