1 Java内存模型 JMM内存模型 ? Java内存模型(Java Memory Model简称JMM)是一种抽象的概念,并不真实存在,它描 述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构 成数组对象的元素)的访问方式。JVM运行程序的实体是线程,而每个线程创建 ...
分类:
编程语言 时间:
2020-05-01 18:29:43
阅读次数:
74
1、前言 在Java5.0之前,协调对共享对象的访问可以使用的机制只有synchronized和volatile。synchronized关键字实现了内置锁,而volatile关键字保证了多线程的内存可见性。在大多数情况下,这些机制都能很好地完成工作,但却无法实现一些更高级的功能,例如,无法中断一个 ...
分类:
其他好文 时间:
2020-04-30 23:23:53
阅读次数:
55
首先要明白每一个线程都是有自己单独的内存区域来执行操作的,也就是有单独的计数器,单独的局部变量等。多线程之间的共享对象,如果在多线程环境下不做特殊处理是极易出问题的。现在主要说的是线程交互之间的可见性。 那什么是可见性呢,简单来说就是纸某个线程修改共享变量的指令对其他线程来说都可见的,它反映的是指令 ...
分类:
编程语言 时间:
2020-04-30 09:16:40
阅读次数:
55
分析解决线程安全问题的锁在使用中的问题。 场景: 在?个类?有两个int类型的字段a和b,有?个add?法循环1万次对a和b进 ?++操作,有另?个compare?法,同样循环1万次判断a是否?于b,条件成?就打印a和b的值,并判断 a>b是否成?。 代码如下: volatile int a = 1 ...
分类:
编程语言 时间:
2020-04-25 23:56:44
阅读次数:
123
什么是单例模式 单例模式指的是,保证一个类只有一个实例,并且提供一个可以全局访问的入口。 为什么需要使用单例模式 那么我们为什么需要单例呢?其中一个理由,那就是为了节省内存、节省计算。因为在很多情况下,我们只需要一个实例就够了,如果出现更多的实例,反而纯属浪费。 下面我们举一个例子来说明这个情况,以 ...
分类:
其他好文 时间:
2020-04-25 19:02:18
阅读次数:
68
多线程、并发及线程的基础问题 1)Synchronized 用 过 吗 , 其 原 理 是 什 么 ? 2)volatile 能使得一个非原子操作变成原子操作吗? 3)volatile 修饰符的有过什么实践? 4)volatile 类型变量提供什么保证? 5) 10 个线程和 2 个线程的同步代码, ...
分类:
编程语言 时间:
2020-04-25 17:19:05
阅读次数:
54
volatile 保证内存可见性和禁止指令重排。 volatile 用于多线程环境下的单次操作(单次读或者单次写)。 ...
分类:
其他好文 时间:
2020-04-25 00:38:00
阅读次数:
85
单例模式 package com.designpattern; public class SingletonDemo { private static volatile SingletonDemo singleton; private SingletonDemo(){} private static ...
分类:
其他好文 时间:
2020-04-23 23:10:07
阅读次数:
74
“volatile”,在 C 语言中该关键字用于表示变量是易变的,要求编译器不要优化。这些结构体内的成员,都代表着寄存器,而寄存器很多时候是由外设或 STM32 芯片状态修改的,也就是说即使 CPU 不执行代码修改这些变量,变量的值也有可能被外设修改、更新,所以每次使用这些变量的时候,我们都要求 C ...
分类:
编程语言 时间:
2020-04-23 00:25:42
阅读次数:
92
synchronized synchronized关键字锁定的是对象不是代码块,demo中锁的是object对象的实例 锁定的对象有两种:1.类的实例 2.类对象 加synchronized关键字之后不一定能实现线程安全,具体还要看锁定的对象是否唯一。 看个demo: private int cou ...
分类:
其他好文 时间:
2020-04-20 23:38:27
阅读次数:
64