Synchronize同步
Volatile
多线程之间的可见性
但是,不具备同步性,也就是原子性
可以算是一个轻量级synchronized
性能比synchronized强很多,不会造成阻塞
在很多开源架构里
比如,netty的底层代码,就大量使用volatile
可见,netty性能一定非常不错
Volatile
用于只针对多个线程的可见性的变量操作
并不能,代表synchronize的同步功能
Atomic
实现原子性
可以使用atomic类的系列对象,支持原子性操作
Atomic类
只保证本身方法原子性,并不保证多次操作的原子性
保证多次操作的原子性,需要加synchronize
package com.bjsxt.base.sync007;import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;public class AtomicUse {private static AtomicInteger count = new AtomicInteger(0);//多个addAndGet在一个方法内是非原子性的,需要加synchronized进行修饰,保证4个addAndGet整体原子性/**synchronized*/public synchronized int multiAdd(){try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}count.addAndGet(1);count.addAndGet(2);count.addAndGet(3);count.addAndGet(4); //+10return count.get();}public static void main(String[] args) {final AtomicUse au = new AtomicUse();List<Thread> ts = new ArrayList<Thread>();for (int i = 0; i < 100; i++) {ts.add(new Thread(new Runnable() {@Overridepublic void run() {System.out.println(au.multiAdd());}}));}for(Thread t : ts){t.start();}}
}
运行
Synchronize同步相关推荐
- java并发,同步synchronize和lock锁的使用方法和注意,死锁案例分析
1.什么是线程安全问题 多个线程同时共享同一个全局变量或者静态变量的时候,某个线程的写操作,可能会影响到其他线程操作这个变量.所有线程读一个变量不会产生线程安全问题. 实际场景就是火车站买票问题:剩余 ...
- Synchronize读脏
Synchronize读脏 对一个对象的方法加锁的时候,需要考虑业务的整体性 为setValue/getValue方法,同时加上synchronize同步关键字 保证业务的原子性,否则,会出现错误的结 ...
- Synchronize使用
Synchronize 同步代码块 多个线程,访问同一个代码块 package com.bjsxt.base.sync001;import java.util.concurrent.atomic.At ...
- 你真的知道Java同步锁何时释放?
在测试java多线程中有关 "生产者和消费者" 这个经典问题的时候,写代码测试的时候,思考到一些问题(所以还是要动手,实践才能储真知啊), synchronize 同步锁何时释放, ...
- Java多线程(三)——多线程实现同步
目录 一.引言 二.synchronize同步 1.synchronize代码块 2.synchronize方法 三.lock同步 1.普通lock+condition 2.lock+conditio ...
- Synchronize的底层优化(CAS,重量级锁,轻量级锁,偏向锁)
Synchronize的底层优化(CAS,重量级锁,轻量级锁,偏向锁) Java 对象头 (重点) 对象头 对象头包含两部分: 运行时元数据(Mark Word)和类型指针(Klass Word) 运 ...
- P576线程P582多线程P583startP584Runnable创建线程P58子线程应用P587退出P588方法P591守护线程P592线程7大状态P593同步P594互斥锁P596释放锁P598
576线程-P598作业2 P576线程 P582多线程机制 public class Thread01 {public static void main(String[] args) {//创建Ca ...
- java迭代器创建后mutx锁,java集合【5】—— Collections接口源码解析
一.Collections接口是做什么的? 用官网文档的介绍:The polymorphic algorithms described here are pieces of reusable func ...
- 程序员交流平台_Java虚拟机所管理的内存到底有哪些?Java程序员必看栏目(上)...
Java虚拟机所管理的内存将会包括以下几个运行时数据区域: 1,程序计数器Program Counter Register 一块较小的内存空间,非所有线程共享的区域,每个程序计数器,都会记录当前线程执 ...
最新文章
- 游戏中的人工智能(AI)和行为树科普
- 第三方登录过程—OAuth2.0协议
- libxml2用xpath进行查找
- ddr5内存上市时间_DDR5内存明年才能上市,SK Hynix已预研DDR6:12Gbps
- 视频丨包不同的沙雕敏捷之砸锅卖铁买兰博
- 完全卸载gitlab
- 使软件可二次开发_RobotStudio二次开发:Smart组件I/O信号声明
- websocket 带头部信息请求 header_BeetleX之Websocket协议分析详解
- Unity3D基础12:碰撞体
- Apache Flink 误用之痛
- Sense 406错误
- 史上最经典摇滚柔情曲15首
- 微信小程序使用阿里云物联网API开发物联网应用
- 美股数据获取 python_几行Python代码,轻松获取美股阿里巴巴的交易数据
- graphpad细胞增殖曲线_应用GraphPad Prism制作生存曲线详细图文过程
- abs和pc混在一起怎么解决_PC和ABS塑料使用中常见问题的分析及其解决办法
- 按键精灵 android 精简版,超精简的游戏脚本(适合大部分游戏)
- 考研数学之线性代数知识点
- 如何挽回前男友!看懂你也可以成功!(万字攻略)
- php 麻辣心情笑话网,想吃麻辣小龙虾说说 想吃龙虾幽默的心情感慨