zoukankan      html  css  js  c++  java
  • Java多线程-死锁

    package com.swust.four;
    /**
    * 多线程因为竞争资源而产生死锁
    * 在操作系统中,临界资源是同一时间只准一个进程使用的资源,
    * 临界区是进程访问临街资源期间所执行的那段程序。产生死锁
    * 所需要的四个必要条件是:
    * 1.临界资源使用的互斥性。
    * 2.部分地分配资源
    * 3.资源的循环等待
    * 4.资源的不可抢占性
    * 对于Java而言,死锁主要是线程死锁。临界资源就是同一时间只
    * 准一个线程使用的资源,临界区是线程访问临界资源所执行的那
    * 段程序。Java中的synchronized就是用来保持临界区同步的。
    * @author 死锁
    */
    public class DeadLock {

    public static void main(String[] args) {

    //定义线程竞争的两个临界资源
    final Object resourceOne = "resourceOne";
    final Object resourceTwo = "resourceTwo";
    //第一个线程,先竞争resourceOne,后竞争resourceTwo
    Thread t1 = new Thread(){
    public void run(){
    //锁定resourceOne
    synchronized(resourceOne){
    System.out.println("Thread 1: locked resourceOne");
    //线程休眠一段时间
    try {
    Thread.sleep(50);
    } catch (InterruptedException e) {
    // TODO: handle exception
    }
    //竞争resourceTwo
    synchronized (resourceTwo) {
    System.out.println("Thread 1: locked resourceTwo");
    }
    }
    }
    };
    //第二个线程,先竞争resourceTwo,后竞争resourceOne
    Thread t2 = new Thread(){
    public void run(){
    synchronized (resourceTwo) {
    System.out.println("Thread 2: lockede resouceTwo");
    //线程休眠
    try {
    Thread.sleep((int)Math.random()*100);
    } catch (InterruptedException e) {
    // TODO: handle exception
    }
    synchronized (resourceOne) {
    System.out.println("Thread 2: locked resourceOne");
    }
    }
    }
    };
    //启动线程
    t1.start();
    t2.start();
    }
    }

    //结果分析

     如此可见 Thread1和Thread2始终都得不到他们想要的资源,thread1想要resourceTwo的资源始终被thread2占用

    thread2想要resourceOne的资源始终被thread1占用。

  • 相关阅读:
    PAT甲题题解-1017. Queueing at Bank (25)-模拟
    PAT甲题题解-1015. Reversible Primes (20)-素数
    PAT甲题题解-1013. Battle Over Cities (25)-求联通分支个数
    PAT甲题题解-1012. The Best Rank (25)-排序水题
    POJ 3384 Feng Shui
    POJ 3525 Most Distant Point from the Sea
    HDU 1115 Lifting the Stone
    FJ省队集训最终测试 T2
    FJ省队集训最终测试 T3
    考前总结小本本
  • 原文地址:https://www.cnblogs.com/walxt/p/12200102.html
Copyright © 2011-2022 走看看