zoukankan      html  css  js  c++  java
  • 线程死锁代码

     
    /**
     * @author hollis
     */
    public class JStackDemo {
        public static void main(String[] args) {
            Thread t1 = new Thread(new DeadLockclass(true));//建立一个线程
            Thread t2 = new Thread(new DeadLockclass(false));//建立另一个线程
            t1.start();//启动一个线程
            t2.start();//启动另一个线程
        }
    }
    class DeadLockclass implements Runnable {
        public boolean falg;// 控制线程
        DeadLockclass(boolean falg) {
            this.falg = falg;
        }
        public void run() {
            /**
             * 如果falg的值为true则调用t1线程
             */
            if (falg) {
                while (true) {
                    synchronized (Suo.o1) {
                        System.out.println("o1 " + Thread.currentThread().getName());
                        synchronized (Suo.o2) {
                            System.out.println("o2 " + Thread.currentThread().getName());
                        }
                    }
                }
            }
            /**
             * 如果falg的值为false则调用t2线程
             */
            else {
                while (true) {
                    synchronized (Suo.o2) {
                        System.out.println("o2 " + Thread.currentThread().getName());
                        synchronized (Suo.o1) {
                            System.out.println("o1 " + Thread.currentThread().getName());
                        }
                    }
                }
            }
        }
    }
    
    class Suo {
        static Object o1 = new Object();
        static Object o2 = new Object();
    }
    import org.springframework.stereotype.Component;
    
    
    @Component
    public class SynchronizedTest {
    
          private static final Object lockA = new Object();
          private static final Object lockB = new Object();
    
          
          
          /**
           * ThreadA先获取lockA,在获取lockB
           */
          private static class ThreadA extends java.lang.Thread {
    
            @Override
            public void run() {
              // 获取临界区A
              synchronized (lockA) {
                System.out.println("get lockA success");
                // 模拟耗时操作
                try {
                    Thread.currentThread().setName("线程A");
                  Thread.sleep(500);
                } catch (InterruptedException e) {
                  e.printStackTrace();
                }
                // 获取临界区B
                synchronized (lockB) {
                  System.out.println("get lockB success");
                }
              }
            }
          }
    
          /**
           * ThreadB先获取lockB,在获取lockA
           */
          private static class ThreadB extends java.lang.Thread {
    
            @Override
            public void run() {
              // 获取临界区A
              synchronized (lockB) {
                System.out.println("get lockB success");
                // 模拟耗时操作
                try {
                    Thread.currentThread().setName("线程B");
                  Thread.sleep(500);
                } catch (InterruptedException e) {
                  e.printStackTrace();
                }
                // 获取临界区B
                synchronized (lockA) {
                  System.out.println("get lockA success");
                }
              }
            }
          }
          
          static {
              new ThreadA().start();
              new ThreadB().start();
          }
        }
  • 相关阅读:
    忽然背后冒冷汗
    随机获取中国境内ip地址的php代码
    复制粘贴的句子
    Winform使用BackGroundWorker代替线程执行后台代码
    在IE中测试调用Web Service
    在存储过程中编写正确的事务处理代码
    【转】使用HttpWebRequest POST图片等文件,带参数
    LINQ to Entities 不识别方法"System.String ToString()"
    Asp.net 出现:HTTP 错误 404.0 Not Found
    C# 用内存映射文件读取大日志文件(.log)
  • 原文地址:https://www.cnblogs.com/shihaiming/p/11459953.html
Copyright © 2011-2022 走看看