zoukankan      html  css  js  c++  java
  • 局部变量的同步锁是无效的。

    看到一种这样的写法,创键一个局部变量,并锁住这个变量,

    public void test(){
        Integer t = new Integer();
        synchronized(t){
            do...   
        }
    }

    感觉有点不对,写了一段测试代码

    package cn.angelshelter.fanmore.test;
    
    public class ThreadTest extends Thread{
    
        private String name;
        
        public ThreadTest(String name){
            this.name = name;
        }
    
        @Override
        public void run() {
            test();
        }
        
        public void test(){
            Double t = Math.random();
            synchronized(t){
                System.out.println("进入同步区域 " + name);
                try {
                    Thread.sleep(5000);  //睡5s
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }  
                System.out.println("离开同步区域 " + name);
            }
        }
        
        public static void main(String[] args) {
            ThreadTest t1 = new ThreadTest("我是男一号");
            t1.start();
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            ThreadTest t2 = new ThreadTest("我是女一号");
            t2.start();
        }
    }

    运行结果:

    进入同步区域 我是男一号
    进入同步区域 我是女一号
    离开同步区域 我是男一号
    离开同步区域 我是女一号

    女一号还是打断了男一号的思考。并没有锁住。

  • 相关阅读:
    C++类的内存结构
    emplace与insert的区别(C++11)
    C/C++宏的奇技淫巧
    编译器对内存的分配
    利用C++实现模块隐藏(R3层断链)
    PCB标准规范
    RTC 总结
    0.96寸OLED显示屏 IIC接口(SSD1306)
    串行通信简介(SPI, IIC, UART)
    人生感悟
  • 原文地址:https://www.cnblogs.com/angelshelter/p/4205564.html
Copyright © 2011-2022 走看看