题目是并发环境 运行时初始化,有点晕菜,仔细想了下实现

为了保持可见性使用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并发环境安全初始化相关推荐

  1. java并发中的延迟初始化

    不安全的延迟初始化示例: Java代码   public class UnsafeLazyInitialization { private static Resource resource; publ ...

  2. java 无锁缓存_如何在高并发环境下设计出无锁的数据库操作(Java版本)

    一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...

  3. 如何在高并发环境下设计出无锁的数据库操作(Java版本) 转载

    一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...

  4. java 延迟初始化_Java并发编程——延迟初始化占位类模式

    --仅作笔记使用,内容多摘自<java并发编程实战> 在并发编程中,如果状态变量仅在单个线程中初始化和使用,自然是线程安全的,但一旦涉及到线程间的数据交互,如何声明一个用于多线程的单例状态 ...

  5. java支付宝支付_Java 高并发环境下的性能优化,揭秘支付宝技术内幕

    前言 高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等. 为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适 ...

  6. java实现代码在线编译器-从零开发(三)Web并发环境下的线程安全

    并发环境下会出现什么问题? 上一篇已经测试过,单个请求是能正常执行并且返回的.但是,系统部署在公网上往往不可能一个人使用,因此必须经过并发测试,不求多规范,至少简单的并发测试也是要进行的. Apifo ...

  7. flash cs3 pro 写了脚本说java运行环境出错,Flash CS3动作面板打开出错[Java运行时环境初始化时出现错误,你可能需要重......

    为了携带和使用方便,大多数人会选择使用软件的精简版,首先要感谢那些制作精简版软件的作者,因为这类软件一般不用安装,直接就能使用,而且体积一般只有 100MB左右.不过,正因为精简版精简了很多被认为是& ...

  8. Java改知能机_Java 面试突击之 Java 并发知识基础 进阶考点全解析

    版权说明:本文内容根据 github 开源项目整理所得 项目地址:https://github.com/Snailclimb/JavaGuide​github.com 一.基础 什么是线程和进程? 何 ...

  9. Java并发编程题库

    文章目录 并发编程三要素? 实现可见性的方法有哪些? 创建线程的有哪些方式? 创建线程的三种方式的对比? Runnable 和 Callable 的区别 Java线程具有五中基本状态 什么是线程池?有 ...

最新文章

  1. 经典的X/OpenDTP事务模型
  2. leetcode算法—两数相加 Add Two Numbers
  3. 用shc加密shell脚本
  4. paip.论大数据的方法,技术erlang,haddop.attilax总结.
  5. 华为交换机的使用命令及简单配置(亲测)
  6. C语言入门之C语言开发环境搭建
  7. 向日葵远程调用Visual studio2019时白屏透明黑屏解决方案
  8. 基于51单片机的数字电流电压表
  9. 树莓派IIC通讯获取BMI08x IMU数据进行姿态解算,并通过UART/TCP在rviz上显示
  10. windows系统修复
  11. 什么是pptp,什么是vps?两者有何区别?
  12. 使用Post不传Body,出现socket hang up报错
  13. linux下ps、grep和kill联合使用杀掉进程
  14. matlab实现彩色图像的平移、旋转、缩放、镜像(双线性插值)
  15. 广电总局要求所有视频网站TV端APP下架
  16. python中3or5什么意思_解析python中and与or用法
  17. 云安全:Cloudstack云平台搭建详解及经验总结
  18. [vue]开源一个精致完整的Vue项目(豆瓣)
  19. HTTP/2.0 中英文对照
  20. mongrel服务器

热门文章

  1. Java中PO、BO、VO、DTO、POJO、DAO概念及其作用和项目实例图(转)
  2. mac 从终端打开应用程序
  3. [BTS06]BizTalk2006 SDK阅读笔记(五) 管道-Pipeline
  4. SpringMVC中利用HandlerExceptionResolver完成异常处理
  5. 【原】创建Hive表,分号分隔符“;”引起的异常
  6. sublime python3中读取和写入文件时如何解决编码问题
  7. iOS UIButton 图片文字上下垂直布局 解决方案
  8. 如何使用多个参数调用Angular.js过滤器?
  9. 是否保证Python列表的元素保持按插入顺序排列?
  10. 如何创建可变数量的变量?