java 中的 JUC
文章目录
- 什么是JUC?
- JUC包中常常用的到的有哪些?
- volatile 关键字
什么是JUC?
java5.0 提供了 java.util.concurrent
,我们通常称他为JUC包,在本包中新增了一些我们并发编程中常用的一些类,用于定义类似于线程的自定义子系统,包括线程池,异步 IO 和轻量级任务框架;还提供了设计用于多线程上下文中的 Collection 实现。
JUC包中常常用的到的有哪些?
volatile 关键字
volatile 关键字: 当多个线程进行操作共享数据时,可以保证内存中的数据是可见的;相较于 synchronized 是一种
较为轻量级的同步策略;
volatile 不具备"互斥性";
volatile 不能保证变量的"原子性";
// 使用 volatile 之前
public class TestVolatile{public static void main(String[] args){ThreadDemo td = new ThreadDemo();new Thread(td).start();while(true){if(td.isFlag()){System.out.println("########");break;}}}
}class ThreadDemo implements Runnable{private boolean flag = false;public void run(){try{// 该线程 sleep(200), 导致了程序无法执行成功Thread.sleep(200);}catch(InterruptedException e){e.printStackTrace();}flag = true;Sytem.out.println("flag="+isFlag());}public boolean isFlag(){return flag;}public void setFlag(boolean flag){this.flag = flag;}
}
// 解决问题方式一: 同步锁
// 但是,效率太低
public class TestVolatile{public static void main(String[] args){ThreadDemo td = new ThreadDemo();new Thread(td).start();while(true){// 使用同步锁synchronized(td){if(td.isFlag()){System.out.println("########");break;}}}}
}// 解决方式二: 使用 volatile 关键字
public class TestVolatile{public static void main(String[] args){ThreadDemo td = new ThreadDemo();new Thread(td).start();while(true){if(td.isFlag()){System.out.println("########");break;}}}
}class ThreadDemo implements Runnable{private volatile boolean flag = false;private boolean flag = false;public void run(){try{// 该线程 sleep(200), 导致了程序无法执行成功Thread.sleep(200);}catch(InterruptedException e){e.printStackTrace();}flag = true;Sytem.out.println("flag="+isFlag());}public boolean isFlag(){return flag;}public void setFlag(boolean flag){this.flag = flag;}
}
java 中的 JUC相关推荐
- JUC学习:java中的各种锁详细介绍
转自:https://www.cnblogs.com/jyroy/p/11365935.html ,我在网上看到了一篇很好的blog来介绍锁的相关内容,在这记录下来以供后面自己学习 Java提供了种类 ...
- 图解Java中那18 把锁
乐观锁和悲观锁 独占锁和共享锁 互斥锁和读写锁 公平锁和非公平锁 可重入锁 自旋锁 分段锁 锁升级(无锁|偏向锁|轻量级锁|重量级锁) 锁优化技术(锁粗化.锁消除) 乐观锁和悲观锁 悲观锁 悲观锁对应 ...
- Java多线程系列--“JUC原子类”01之 框架
2019独角兽企业重金招聘Python工程师标准>>> Java多线程系列--"JUC原子类"01之 框架 根据修改的数据类型,可以将JUC包中的原子操作类可以分 ...
- Java多线程系列--“JUC原子类”03之 AtomicLongArray原子类
概要 AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray这3个数组类型的原子类的原理和用法相似.本章以AtomicLongArray对数 ...
- Java并发编程—JUC的Lock锁
一.Lock (JUC锁) JUC 锁位于java.util.concurrent.locks包下,为锁和等待条件提供一个框架,它不同于内置同步和监视器. CountDownLatch,CyclicB ...
- Java多线程系列--“JUC线程池”06之 Callable和Future
转载自 Java多线程系列--"JUC线程池"06之 Callable和Future Callable 和 Future 简介 Callable 和 Future 是比较有趣的一 ...
- java中审核订单流程图_Java 后端横扫阿里、滴滴、美团总结的面试经验!
这次面试的公司有一点点多,主要是因为毕业后前两份工作找的都很草率,这次换工作就想着,emm,毕业三年了,该找个工作好好沉淀几年了. 先说下这次面试的结果吧: 到 hr 面的:阿里.美团.滴滴.金山云. ...
- Java多线程系列--“JUC锁”05之 非公平锁
转载自:http://www.cnblogs.com/skywang12345/p/3496651.html点击打开链接 概要 前面两章分析了"公平锁的获取和释放机制",这一章开始 ...
- Java多线程系列---“JUC锁”01之 框架
本章,我们介绍锁的架构:后面的章节将会对它们逐个进行分析介绍.目录如下: 01. Java多线程系列--"JUC锁"01之 框架 02. Java多线程系列--"JUC锁 ...
最新文章
- MySql 之 left join 避坑指南
- ​Python数据可视化工具怎么选?深度评测5款实用工具
- Insertion Loss Return Loss
- 琢磨琢磨,while (true) 和 for (;;) 哪个更快?!
- CSS3 2D和3D转换 Transform
- Ozon Tech Challenge 2020 (Div.1 + Div.2, Rated, T-shirts + prizes!)
- Leetcode--904. 水果成篮
- jeesite如何已生成数据的数据源_jeesite 多数据源配置
- MongoDB数据库设计中6条重要的经验法则,part 2
- fscapture下载收费吗?_如今听歌要收费,下载也要付费,你能接受国内音乐App这种改变吗...
- C# TextBox输入校验方法
- 问题:import org.springframework.security.authentication.encoding.Md5PasswordEncoder;spring5.已移除
- linux其他命令(查找文件、软链接、硬链接)
- mybatis-plus批量insert效率低下怎么办(mysql)
- (附源码)springboot学生宿舍管理系统 毕业设计 211955
- DetectoRS: Detecting Objects with Recursive Feature Pyramid and Switchable Atrous Convolution
- 华中师范大学 -技术类-- 导师信息
- 加拿大滑铁卢大学计算机世界排名,滑铁卢大学世界排名
- 2014 Hulu Upfront Updates
- mysql_slow_详解MySQL中SlowLog的实际配置
热门文章
- 腾讯冯宇彦:基于大数据与人工智能的智慧交通云
- nuxt的asyncData在方法内没有办法通过 this调用
- 身边的人脸安全:员工用人脸作弊工具打卡,企业该如何防范?
- WeGame登录卡死死机无法打开任务管理器只能强制重启的解决方案
- Unity 欧拉角万向节锁的原理
- 全球与中国光纤输出半导体激光器市场现状及未来发展趋势
- pango出现The encodeing of this file is not supported ,file editor try to open it with GB18030
- 七巧板平台html5游戏开发之初识物理引擎
- 中点画线算法(计算机图形学)
- Experimenting with Ingress Controllers on Oracle Container Engine (OKE) — Part 1