zoukankan      html  css  js  c++  java
  • 一个简单的死锁示例

    package cn.com.io.threadDemo.ThreadSyn;

    /**
     * 通过两个属性值创建死锁
     * 本程序通过两个线程各自锁定一个属性值,这样两个线程都无法结束,造成死锁
    */
    public class ThreadSyn2 implements Runnable{
     
     private static Object obj1=new Object();
     
     private static Object obj2=new Object();  //obj1和obj2是线程共享的,嵌套会引起死锁!

     /**
      * @param args
      */
     public static void main(String[] args) {
      ThreadSyn2 ts1=new ThreadSyn2();
      ThreadSyn2 ts2=new ThreadSyn2();
      
      Thread t1=new Thread(ts1);//线程1
      Thread t2=new Thread(ts2);//线程2
      t1.setName("theOne");
      t2.setName("theTwo");
      
      t1.start();
      t2.start();

     }

     public void run() {
      String name=Thread.currentThread().getName();
      if(name.equals("theOne"))

    {
       method1(name);
      }

    else

    {
       method2(name);
      }
      
     }

     //线程1的方法锁定obj1,线程2就无法完成
     private void method1(String name) {
      System.out.println(name);
      synchronized(obj1){
       try {
        Thread.sleep(1000);
       } catch (InterruptedException e) {
        e.printStackTrace();
       }
       synchronized(obj2){
        System.out.println(obj2);
       }   
      }  

     }

        //线程1的方法锁定obj2,线程1就无法完成
     private void method2(String name) {
      System.out.println(name);
      synchronized(obj2){
       try {
        Thread.sleep(1000);
       } catch (InterruptedException e) {
        e.printStackTrace();
       }
       synchronized(obj1){
        System.out.println(obj1);
       }
      }  

     }


    }

  • 相关阅读:
    六白话经典算法系列 高速分拣 高速GET
    neu1458 方格取数 dp解法
    自然语言处理---新词发现---微博数据预处理2
    JQuery之初探
    TFS(Team Foundation Server)介绍和入门
    ZooKeeper的学习与应用
    软考之路(六)---数据库---深入浅出 三层模式两级映像
    Open the Lock
    C/C++产生随机数
    RPM安装包-Spec文件參数具体解释与演示样例分析
  • 原文地址:https://www.cnblogs.com/baoendemao/p/3804725.html
Copyright © 2011-2022 走看看