synchronized的可见性理解
public class SingleTest {
    private static SingleTest singleTest;   // 这个应该用volatile修饰
    //获取单例的方法
    public static SingleTest getInstance() {
        if(singleTest == null){
            synchronized (SingleTest.class){
                if(singleTest == null){
                    singleTest = new SingleTest();
                }
            }
        }
        return singleTest;
    }
}

//可见性验证
@Test
public void testA() throws InterruptedException {
//启动线程在不停监视str变化
Thread th1 = new Thread(() -> {
while(true){
if(str.equals("b")){
System.out.println("th1 ==> str 已经被改为 b ," + Thread.currentThread());
}
}
});
Thread th2 = new Thread(() -> {
while(true){
synchronized (str){
if(str.equals("b")){
System.out.println("th2 ==> str 已经被改为 b ," + Thread.currentThread());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
});
th1.start();
th2.start(); //让监视线程都启动完毕
Thread.sleep(3000); System.out.println("修改str的值为b");
synchronized (str){
str = "b";
} Thread.sleep(3000);
}

synchronized的可见性理解的更多相关文章
- synchronized内存可见性理解
		一.背景 最近在看<Java并发编程实战>这本书,看到共享变量的可见性,其中说到"加锁的含义不仅仅局限于互斥行为,还包括内存可见性". 我对于内存可见性第一反应是vol ... 
- 原子性、可见性、synchronized 有好理解
		原子性.可见性.synchronized 有好理解: from: https://blog.csdn.net/wohaqiyi/article/details/67635010 1.原子性 (1)原子 ... 
- java synchronized实现可见性对比volatile
		问题: 大家可以先看看这个问题,看看这个是否有问题呢? 那里有问题呢? public class ThreadSafeCache { int result; public int getResult( ... 
- java 多线程 Synchronized方法和方法块 synchronized(this)和synchronized(object)的理解
		synchronized 关键字,它包括两种用法:synchronized 方法和 synchronized 块. 1. synchronized 方法:通过在方法声明中加入 synchronized ... 
- java学习:JMM(java memory model)、volatile、synchronized、AtomicXXX理解
		一.JMM(java memory model)内存模型 从网上淘来二张图: 上面这张图说的是,在多核CPU的系统中,每个核CPU自带高速缓存,然后计算机主板上也有一块内存-称为主内(即:内存条).工 ... 
- 关于synchronized 影响可见性的问题
		问题来自于学习thinking in java的时候的一个示例,先上代码吧 public class StopThread { private static boolean stop = false; ... 
- Volatile和Synchronized对可见性和原子性的支持
		在学习并发编程的时候,遇见了volatile和synchronized关键字问题,volatile是可以保证可见性,但无法保证原子性,synchronized关键字由于其是加锁机制,肯定是可以保证原子 ... 
- synchronized实现可见性
		JMM关于synchronized的两条规定: 1)线程解锁前,必须把共享变量的最新值刷新到主内存中 2)线程加锁时,将清空工作内存中共享变量的值,从而使用共享变量时需要从主内存中重新获取最新的值 ( ... 
- java线程-synchronized实现可见性代码
		以下是一个普通线程代码: package com.Sychronized; public class SychronizedDemo { //共享变量 private boolean ready=fa ... 
随机推荐
- Android AIDL的用法
			一.什么是AIDL服务 一般创建的服务并不能被其他的应用程序访问.为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Cal ... 
- CodeForces 620E New Year Tree(线段树的骚操作第二弹)
			The New Year holidays are over, but Resha doesn't want to throw away the New Year tree. He invited h ... 
- js代码定义类代码的领悟
			var Class = { create: function() { return function() { this.initialize.apply(this, argumen ... 
- DLL的概念、dll导出类(转贴)
			1. DLL的概念DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数.变量或类.这些可以直接拿来使用.静态链接库与动态链接库的区别:(1)静态链接库与动态链 ... 
- Delphi 中调用JS文件中的方法
			unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ... 
- ibatis 参数之模糊查询
			因项目需要最近使用ibatis,在使用查询语句的时候,想着通用性所以没有在配置文件里用N多的and 语句,而是如下: <select id="getUsersList" re ... 
- 直接导入用户信息到discuz ucenter.
			上一篇帖子: 直接导入帖子到Discuz 论坛数据库. 结束时说要写一篇导入用户的帖子, 一直没时间, 但是咱不能做太监,不是? 所以今天赶快补上. 在做discuz整合或者迁移是, 很多人可能遇到相 ... 
- PowerDesigner Comment与Name相互替换
			从name替换comment Option Explicit ValidationMode = True InteractiveMode = im_Batch Dim mdl ' the curren ... 
- dataframe 转为list
			首先使用np.array()函数把DataFrame转化为np.ndarray(),再利用tolist()函数把np.ndarray()转为list. 
- jQuery滚动到特定位置时出现
			<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
