java并发环境安全初始化
题目是并发环境 运行时初始化,有点晕菜,仔细想了下实现
为了保持可见性使用volatile,最开始调用getInstance可能导致写锁竞争,写锁内部还要加个判空
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class SyncSingleton {private static volatile SyncSingleton single=null;private static final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();private static final Lock r=lock.readLock();private static final Lock w=lock.writeLock();private SyncSingleton(){}public static SyncSingleton getInstance(){if (single == null) { //运行时判断,为空初始化w.lock();//上写锁try {if (single==null) {//写锁可能有多个线程等待,这里需要再判断一下single=new SyncSingleton();}} finally {w.unlock();}}return single;}public String readMethod(){r.lock();try {//....} finally {r.unlock();}return null;}public void modifySingleton(){w.lock();try {//....} finally {w.unlock();}}
}
转载于:https://blog.51cto.com/yingtju/1281174
java并发环境安全初始化相关推荐
- java并发中的延迟初始化
不安全的延迟初始化示例: Java代码 public class UnsafeLazyInitialization { private static Resource resource; publ ...
- java 无锁缓存_如何在高并发环境下设计出无锁的数据库操作(Java版本)
一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...
- 如何在高并发环境下设计出无锁的数据库操作(Java版本) 转载
一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...
- java 延迟初始化_Java并发编程——延迟初始化占位类模式
--仅作笔记使用,内容多摘自<java并发编程实战> 在并发编程中,如果状态变量仅在单个线程中初始化和使用,自然是线程安全的,但一旦涉及到线程间的数据交互,如何声明一个用于多线程的单例状态 ...
- java支付宝支付_Java 高并发环境下的性能优化,揭秘支付宝技术内幕
前言 高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等. 为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适 ...
- java实现代码在线编译器-从零开发(三)Web并发环境下的线程安全
并发环境下会出现什么问题? 上一篇已经测试过,单个请求是能正常执行并且返回的.但是,系统部署在公网上往往不可能一个人使用,因此必须经过并发测试,不求多规范,至少简单的并发测试也是要进行的. Apifo ...
- flash cs3 pro 写了脚本说java运行环境出错,Flash CS3动作面板打开出错[Java运行时环境初始化时出现错误,你可能需要重......
为了携带和使用方便,大多数人会选择使用软件的精简版,首先要感谢那些制作精简版软件的作者,因为这类软件一般不用安装,直接就能使用,而且体积一般只有 100MB左右.不过,正因为精简版精简了很多被认为是& ...
- Java改知能机_Java 面试突击之 Java 并发知识基础 进阶考点全解析
版权说明:本文内容根据 github 开源项目整理所得 项目地址:https://github.com/Snailclimb/JavaGuidegithub.com 一.基础 什么是线程和进程? 何 ...
- Java并发编程题库
文章目录 并发编程三要素? 实现可见性的方法有哪些? 创建线程的有哪些方式? 创建线程的三种方式的对比? Runnable 和 Callable 的区别 Java线程具有五中基本状态 什么是线程池?有 ...
最新文章
- 经典的X/OpenDTP事务模型
- leetcode算法—两数相加 Add Two Numbers
- 用shc加密shell脚本
- paip.论大数据的方法,技术erlang,haddop.attilax总结.
- 华为交换机的使用命令及简单配置(亲测)
- C语言入门之C语言开发环境搭建
- 向日葵远程调用Visual studio2019时白屏透明黑屏解决方案
- 基于51单片机的数字电流电压表
- 树莓派IIC通讯获取BMI08x IMU数据进行姿态解算,并通过UART/TCP在rviz上显示
- windows系统修复
- 什么是pptp,什么是vps?两者有何区别?
- 使用Post不传Body,出现socket hang up报错
- linux下ps、grep和kill联合使用杀掉进程
- matlab实现彩色图像的平移、旋转、缩放、镜像(双线性插值)
- 广电总局要求所有视频网站TV端APP下架
- python中3or5什么意思_解析python中and与or用法
- 云安全:Cloudstack云平台搭建详解及经验总结
- [vue]开源一个精致完整的Vue项目(豆瓣)
- HTTP/2.0 中英文对照
- mongrel服务器
热门文章
- Java中PO、BO、VO、DTO、POJO、DAO概念及其作用和项目实例图(转)
- mac 从终端打开应用程序
- [BTS06]BizTalk2006 SDK阅读笔记(五) 管道-Pipeline
- SpringMVC中利用HandlerExceptionResolver完成异常处理
- 【原】创建Hive表,分号分隔符“;”引起的异常
- sublime python3中读取和写入文件时如何解决编码问题
- iOS UIButton 图片文字上下垂直布局 解决方案
- 如何使用多个参数调用Angular.js过滤器?
- 是否保证Python列表的元素保持按插入顺序排列?
- 如何创建可变数量的变量?