
java并发
文章平均质量分 57
java并发
NeilNiu
日拱一卒无有尽,功不唐捐终入海!
展开
-
Java开发工具箱
java开发工具箱。原创 2022-09-20 23:45:36 · 228 阅读 · 0 评论 -
集合类在并发情况下如何保证线程安全
在正常单线程的情况下不会出现问题,当多线程的时候,List会出现 java.util.ConcurrentModificationException 这种异常public class ContainerNotSafeDemo { public static void main(String[] args) { /** //第一种写法 List<String> list = Arrays.asList("a","b","c");.原创 2021-10-16 12:18:15 · 145 阅读 · 0 评论 -
重学Volatile
并发,是多个线程去访问同一个资源;并行,各种事情同时在做。volatile是java虚拟机提供的轻量级的同步机制三大特性,保证可见性,不保证原子性,禁止指令重排序先说下JMM(java内存模型Java Memory Model)本身是一种抽象的概念并不是真实存在的,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。JMM关于同步的规定:1、线程解锁前,必须把共享变量的值刷新回主内存; 2、线程加锁前,必须读取主内存的最新原创 2021-08-28 17:54:16 · 122 阅读 · 0 评论 -
ConcurrentHashMap
并发容器原创 2020-08-02 12:20:54 · 195 阅读 · 0 评论 -
AQS
AQS原创 2020-08-02 12:19:59 · 486 阅读 · 0 评论 -
CAS
CAS简介CAS全称Compare-And-Swap,中文含义“比较并交换”,它是一种思想,一种算法。在多线程的情况下,为了保证并发的安全性,我们可以使用互斥锁,而CAS的特点是避免使用互斥锁,当多个线程同时使用CAS更新同一个变量时,只有其中一个线程能够操作成功,而其他线程都会更新失败。不过和同步互斥锁不同的是,CAS不会让失败的线程阻塞,而是被告知这次由于竞争而导致的操作失败,但还可以再次尝试。CAS广泛用在并发编程领域中,以实现那些不会被打断的数据交换操作,从而实现无锁的安全。CAS思原创 2020-07-26 22:39:52 · 224 阅读 · 0 评论 -
java内存模型总结
在说java内存模型之前,先澄清下JVM内存结构与Java内存模型Java作为一种面向对象的语言原创 2020-07-25 22:33:12 · 230 阅读 · 0 评论 -
ThreadLocal
1111原创 2020-07-25 22:30:02 · 154 阅读 · 0 评论 -
java中的锁类型
一、偏向锁原创 2020-06-27 16:45:29 · 595 阅读 · 0 评论 -
java内存模型JMM
Java内存模型(Java Memory Model,简称JMM),即Java虚拟机定义的一种用来屏蔽各种硬件和操作系统的内存访问差异,以实现让java程序在各种平台下都能够达到一致的内存访问效果的内存模型。本篇文章大致涉及到五个要点:1、Java内存模型的基础,主要介绍JMM抽象结构;2、Java内存模型中内存屏障;3、Java内存模型中的重排序;4、happens-before原则;JMM相关的三个同步原语(synchronized,volatile,final)。1.Java内存模型的抽象结构原创 2020-06-14 11:14:35 · 290 阅读 · 0 评论 -
volatile特性及实现原理
一个volatile变量自身具有以下三个特性:1、可见性:即当一个线程修改了声明为volatile变量的值,新值对于其他要读该变量的线程来说是立即可见的。而普通变量是不能做到这一点的,普通变量的值在线程间传递需要通过主内存来完成。2、有序性:volatile变量的所谓有序性也就是被声明为volatile的变量的临界区代码的执行是有顺序的,即禁止指令重排序。3、受限原子性:这里volatile变量的原子性与synchronized的原子性是不同的,synchronized的原子性是指只要声明为sy原创 2020-06-14 11:03:46 · 2096 阅读 · 0 评论 -
java线程
并发与并行3.1创建和运行线程多线程创建方式一、二、使用lambda表达式写法更精简Thread 与Runnable关系,看下源码,Runable里走的也是走的run方法方法:把线程和任务合并起来了,方法二,把线程和任务分开来了。Runable更容易与线程池等高级api配合使用。今日完成,多线程两种写法 和使用lambda表达式写法,分析源码Thread 和Runnable关系。序列化和反序列化,对象转化为string,string转化为bean,Integer.valu原创 2020-06-07 09:52:21 · 205 阅读 · 0 评论