synchronized(九)
在Java中是有常量池缓存的功能的,就是说如果我先声明了一个String str1 = “a”; 再声明一个一样的字符串的时候,取值是从原地址去取的,也就是说是同一个对象。这也就导致了在锁字符串对象的时候,可以会取得意料之外的结果(字符串一样会取得相同锁)。
package com.bjsxt.base.sync006;
/**
* synchronized代码块对字符串的锁,注意String常量池的缓存功能,
* @author alienware
*
*/
public class StringLock {
public void method() {
//new String("字符串常量")
synchronized ("字符串常量") {
try {
while(true){
System.out.println("当前线程 : " + Thread.currentThread().getName() + "开始");
Thread.sleep(1000);
System.out.println("当前线程 : " + Thread.currentThread().getName() + "结束");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
final StringLock stringLock = new StringLock();
Thread t1 = new Thread(new Runnable() {
public void run() {
stringLock.method();
}
},"t1");
Thread t2 = new Thread(new Runnable() {
public void run() {
stringLock.method();
}
},"t2");
t1.start();
t2.start();
}
}
运行结果:
当前线程 : t1开始
当前线程 : t1结束
当前线程 : t1开始
当前线程 : t1结束
当前线程 : t1开始
。。。。。。。。
改为synchronized (new String("字符串常量"))之后,运行结果:
当前线程 : t1开始
当前线程 : t2开始
当前线程 : t2结束
当前线程 : t1结束
当前线程 : t1开始
当前线程 : t2开始
。。。。。。。。
转载于:https://www.cnblogs.com/tsdblogs/p/8761030.html
synchronized(九)相关推荐
- Java多线程学习二十九:AtomicInteger(原子类) 和 synchronized 的异同点?
原子类和 synchronized 关键字都可以用来保证线程安全,在本课时中,我们首先分别用原子类和 synchronized 关键字来解决一个经典的线程安全问题,给出具体的代码对比,然后再分析它们背 ...
- java static 可见性_Java多线程 synchronized与可见性的关系以及可见性问题总结
作者:七里香的编程之路 出自:OSCHINA 原文:my.oschina.net/u/4098550/blog/4548274 能保证可见性的措施 除了volatile 可以让变量保证可见性外.hap ...
- 备战金九银十,阿里P8师兄指导完整攻略(附:学习资料+面试宝典+项目实战笔记)
前言 还剩下两个月就到了金九银十,一般来说,秋招的含金量明显是高于春招的. 那么如何准备即将到来的面试热潮呢?运筹帷幄之后,决胜千里之外! 坚决不打毫无准备的仗是小编的原则:不论是笔试还是面试都是有章 ...
- dubbo源码解析(九)远程通信——Transport层
远程通讯--Transport层 目标:介绍Transport层的相关设计和逻辑.介绍dubbo-remoting-api中的transport包内的源码解析. 前言 先预警一下,该文篇幅会很长,做好 ...
- springMVC九大组件及一次请求流程
一.九大组件 HandlerMapping(处理器映射器) HandlerMapping 是⽤来查找Handler的,也就是处理器,具体的表现形式可以是类,也可以是⽅法.⽐如,标注了@RequestM ...
- Java多线程系列(六):深入详解Synchronized同步锁的底层实现
谈到多线程就不得不谈到Synchronized,很多同学只会使用,缺不是很明白整个Synchronized的底层实现原理,这也是面试经常被问到的环节,比如: synchronized的底层实现原理 s ...
- Android 系统(191)---ODM 开发用户常见需求文档(九)
Android 系统(191)---ODM 开发用户常见需求文档(九) 阅读数:1122 一:去除摄像头的假对焦框 (vendor/) (mediatek/proprietary/packages/a ...
- Android开发笔记(八十九)单例模式
基本概念 单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,从而方便对实例个数的控制并节约系统资源. 单例模式有三个特点: 1.某个类只能有一个实例: 2.它要自行创建这个实例: 3.它只有 ...
- 由浅入深,逐步了解 Java 并发编程中的 Synchronized!
作者 | sowhat1412 责编 | 张文 头图 | CSDN 下载自视觉中国 来源 | sowhat1412(ID:sowhat9094) synchronized 作用 synchroniz ...
最新文章
- 轻量级语义分割网络:ENet
- poj-1384 Piggy-Bank
- mysql的tcp链接过程_tcp建立连接和断开连接过程
- 2015-12-03 AD中用户属性Lastlogon与LastlogonTimeStamp的区别
- Diango博客--13.将“视图函数”类转化为“类视图”
- 今晚鼓捣的audio.js一些小经验
- box2D斜面摩擦力和sprite朝向的兼顾取舍
- C# 最小化到系统托盘的实现(一)
- JasperReport报表开发(一)--原理介绍
- bp神经网络的主要功能,BP神经网络的实现包括
- Wap模拟器,pc端浏览器,手机wap网站,web项目
- 滨州学院CSDN高校俱乐部 策划书
- 【BZOJ5336】【TJOI2018】party
- css透明度兼容问题opacity
- 【泰国留学那些事】水灯节--泰国人极致浪漫的艺术画像
- IBM发表未来5年5项科技预测 3D全息手机或现世
- spreadsheetControl
- 数据结构——单链表 | 完善单链表
- vue学习入门——Idea中安装vue插件
- java开发用allman风格_缩进风格
热门文章
- Spring Cloud Alibaba —— Sentinel 入门
- Hashtable、HashMap、TreeMap总结
- 选择座位html,影厅座位预览效果(css3)_html/css_WEB-ITnose
- 计算机网络聚合怎么设置,交换机的端口聚合如何配置
- Apprentissage du français partie 3
- mysql查看用户名_Mysql创建数据表的方法介绍(附示例)
- python 函数 过程_python学习之函数(三)--函数与过程
- djano 字段不重复_Java 14 发布了,不使用quot;classquot;也能定义类了?还顺手要干掉Lombok!...
- ❤️六W字《计算机基础知识》(五)(建议收藏)❤️
- c语言文件读写_学生信息管理系统(C语言\单向链表\文件读写)