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同步相关推荐

  1. java并发,同步synchronize和lock锁的使用方法和注意,死锁案例分析

    1.什么是线程安全问题 多个线程同时共享同一个全局变量或者静态变量的时候,某个线程的写操作,可能会影响到其他线程操作这个变量.所有线程读一个变量不会产生线程安全问题. 实际场景就是火车站买票问题:剩余 ...

  2. Synchronize读脏

    Synchronize读脏 对一个对象的方法加锁的时候,需要考虑业务的整体性 为setValue/getValue方法,同时加上synchronize同步关键字 保证业务的原子性,否则,会出现错误的结 ...

  3. Synchronize使用

    Synchronize 同步代码块 多个线程,访问同一个代码块 package com.bjsxt.base.sync001;import java.util.concurrent.atomic.At ...

  4. 你真的知道Java同步锁何时释放?

    在测试java多线程中有关 "生产者和消费者" 这个经典问题的时候,写代码测试的时候,思考到一些问题(所以还是要动手,实践才能储真知啊), synchronize 同步锁何时释放, ...

  5. Java多线程(三)——多线程实现同步

    目录 一.引言 二.synchronize同步 1.synchronize代码块 2.synchronize方法 三.lock同步 1.普通lock+condition 2.lock+conditio ...

  6. Synchronize的底层优化(CAS,重量级锁,轻量级锁,偏向锁)

    Synchronize的底层优化(CAS,重量级锁,轻量级锁,偏向锁) Java 对象头 (重点) 对象头 对象头包含两部分: 运行时元数据(Mark Word)和类型指针(Klass Word) 运 ...

  7. 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 ...

  8. java迭代器创建后mutx锁,java集合【5】—— Collections接口源码解析

    一.Collections接口是做什么的? 用官网文档的介绍:The polymorphic algorithms described here are pieces of reusable func ...

  9. 程序员交流平台_Java虚拟机所管理的内存到底有哪些?Java程序员必看栏目(上)...

    Java虚拟机所管理的内存将会包括以下几个运行时数据区域: 1,程序计数器Program Counter Register 一块较小的内存空间,非所有线程共享的区域,每个程序计数器,都会记录当前线程执 ...

最新文章

  1. 游戏中的人工智能(AI)和行为树科普
  2. 第三方登录过程—OAuth2.0协议
  3. libxml2用xpath进行查找
  4. ddr5内存上市时间_DDR5内存明年才能上市,SK Hynix已预研DDR6:12Gbps
  5. 视频丨包不同的沙雕敏捷之砸锅卖铁买兰博
  6. 完全卸载gitlab
  7. 使软件可二次开发_RobotStudio二次开发:Smart组件I/O信号声明
  8. websocket 带头部信息请求 header_BeetleX之Websocket协议分析详解
  9. Unity3D基础12:碰撞体
  10. Apache Flink 误用之痛
  11. Sense 406错误
  12. 史上最经典摇滚柔情曲15首
  13. 微信小程序使用阿里云物联网API开发物联网应用
  14. 美股数据获取 python_几行Python代码,轻松获取美股阿里巴巴的交易数据
  15. graphpad细胞增殖曲线_应用GraphPad Prism制作生存曲线详细图文过程
  16. abs和pc混在一起怎么解决_PC和ABS塑料使用中常见问题的分析及其解决办法
  17. 按键精灵 android 精简版,超精简的游戏脚本(适合大部分游戏)
  18. 考研数学之线性代数知识点
  19. 如何挽回前男友!看懂你也可以成功!(万字攻略)
  20. php 麻辣心情笑话网,想吃麻辣小龙虾说说 想吃龙虾幽默的心情感慨

热门文章

  1. Python之日志处理(logging模块)
  2. oracle数据库操作
  3. 树莓派debian配置lamp[解决Apache不显示php网页]
  4. Python函数之初体验
  5. Mantis使用说明
  6. 显示并查询纯真官方最新IP地址的免费代码
  7. C语言中函数可变参数解析
  8. python常用导入函数及其他操作备忘录
  9. MATLAB之离散时间傅里叶变换DTFT
  10. python 语言教程(2)基础语法之标识符