当前位置: 首页 > news >正文

山东省住房和城乡建设厅注册中心网站sql网站模板

山东省住房和城乡建设厅注册中心网站,sql网站模板,济南网站优化网站,网站改版怎么做301本文通过学习#xff1a;周阳老师-尚硅谷Java大厂面试题第二季 总结的volatile相关的笔记volatile是Java虚拟机提供的轻量级的同步机制#xff0c;三大特性为#xff1a;保证可见性、不保证原子性、禁止指令重排一、保证可见性import java.util.concurrent.TimeUnit;class M…本文通过学习周阳老师-尚硅谷Java大厂面试题第二季 总结的volatile相关的笔记volatile是Java虚拟机提供的轻量级的同步机制三大特性为保证可见性、不保证原子性、禁止指令重排一、保证可见性import java.util.concurrent.TimeUnit;class MyData {//主物理内存volatile int number 0;public void addTo60() {this.number 60;} }public class VolatileDemo {public static void main(String args []) {MyData myData new MyData();new Thread(() - {System.out.println(Thread.currentThread().getName() \t come in);try {TimeUnit.SECONDS.sleep(3);} catch (InterruptedException e) {e.printStackTrace();}myData.addTo60();System.out.println(Thread.currentThread().getName() \t update number value: myData.number);}, AAA).start();while(myData.number 0) {}//说明AAA线程在睡眠3秒后更新的number的值重新写入到主内存并被main线程感知到了System.out.println(Thread.currentThread().getName() \t mission is over);} } /*** AAA come in* AAA update number value:60* main mission is over //若number0没被volatile修饰则这句不打印*/二、不保证原子性1、代码示例import java.util.concurrent.TimeUnit;class MyData {volatile int number 0;public void addPlusPlus() {number ;} }public class VolatileDemo {public static void main(String args []) {MyData myData new MyData();for (int i 0; i 20; i) {new Thread(() - {for (int j 0; j 1000; j) {myData.addPlusPlus();}}, String.valueOf(i)).start();}// 需要等待上面20个线程都计算完成后在用main线程取得最终的结果值// 这里判断线程数是否大于2为什么是2因为默认是有两个线程的一个main线程一个gc线程while(Thread.activeCount() 2) {Thread.yield();//yield表示不执行}// 最终输出的值应该20*100020000System.out.println(Thread.currentThread().getName() \t finally number value: myData.number);//19504} }2、数值丢失的原因线程1和2同时修改各自工作空间中的内容因为可见性需要重写入内存但线程1在写入的时候线程2也同时写入导致线程1的写入操作被挂起导致线程2先写线程1后写线程1的值覆盖了线程2的值因此数据丢失。n这条命令被拆分成了3个指令-getfield 从主内存拿到原始n-iadd 进行加1操作-putfileld 把累加后的值写回主内存假如三个线程同时通过getfield命令拿到主存中的n值然后三个线程各自在自己的工作内存中进行加1操作但他们并发进行 iadd 命令的时候因为只能一个进行写所以其它操作会被挂起假设1线程先进行了写操作在写完后volatile的可见性应该需要告诉其它两个线程主内存的值已经被修改了但是因为太快了其它两个线程陆续执行 iadd命令进行写入操作这就造成了其他线程没有接受到主内存n的改变从而覆盖了原来的值出现写丢失这样也就让最终的结果少于2003、解决办法(synchronized / AtomicInteger) public synchronized void addPlusPlus() { number ; } AtomicInteger atomicInteger new AtomicInteger(); public void addAtomic() { atomicInteger.getAndIncrement(); }三、禁止指令重排指令重排的代码示例public class ResortSeqDemo { int a 0; boolean flag false; public void method01() { a 1; flag true; } public void method02() { if(flag) { a a 5; System.out.println(reValue: a); } }}【顺序执行】a1flagtrueaa5 顺序执行打印reValue:6【指令重排】flagtrueaa5 打印reValue:5a1四、应用-单例模式方法1. synchronized方法2. 禁用指令重排 DCL双端检锁DCL Double Check Lock 双端检锁机制public class SingletonDemo {private static volatile SingletonDemo instance null;private SingletonDemo() {System.out.println(Thread.currentThread().getName() \t 我是构造方法SingletonDemo);}public static SingletonDemo getInstance() {if(instance null) {synchronized (SingletonDemo.class) {if(instance null) {instance new SingletonDemo();}}}return instance;}public static void main(String[] args) {for (int i 0; i 10; i) {new Thread(() - {SingletonDemo.getInstance();}, String.valueOf(i)).start();}} } /* * 0 我是构造方法SingletonDemo */原因是在某一个线程执行到第一次检测的时候读取到 instance 不为nullinstance的引用对象可能没有完成实例化。因为 instance new SingletonDemo()可以分为以下三步进行完成memory allocate(); // 1、分配对象内存空间instance(memory); // 2、初始化对象instance memory; // 3、设置instance指向刚刚分配的内存地址此时instance ! null但是我们通过上面的三个步骤能够发现步骤2 和 步骤3之间不存在 数据依赖关系而且无论重排前 还是重排后程序的执行结果在单线程中并没有改变因此这种重排优化是允许的。memory allocate(); // 1、分配对象内存空间instance memory; // 3、设置instance指向刚刚分配的内存地址此时instance ! null但是对象还没有初始化完成instance(memory); // 2、初始化对象这样就会造成什么问题呢也就是当我们执行到重排后的步骤2试图获取instance的时候会得到null因为对象的初始化还没有完成而是在重排后的步骤3才完成因此执行单例模式的代码时候就会重新在创建一个instance实例指令重排只会保证串行语义的执行一致性单线程但并不会关系多线程间的语义一致性所以当一条线程访问instance不为null时由于instance实例未必已初始化完成这就造成了线程安全的问题, 因此需要引入volatile来保证出现指令重排的问题从而保证单例模式的线程安全性。
http://www.hkea.cn/news/14265699/

相关文章:

  • 站内营销推广途径云南建站公司
  • 滨海专业做网站的公司移动网站开发百度百科
  • 网站代码怎么改h5网站后台管理模板
  • 蛋糕行业网站建设方案佛山网站搜索引擎优化
  • 数字营销技术应用网站响应式网站的优势有那些的呢
  • 网站建设 域名 数据库公司网站建设 上海
  • 深圳 电子商务网站开发旅行社静态模板网站
  • 淘客网站建设教程哪个网站的域名便宜
  • 长安公司网站制作wordpress自定义路由
  • 图书网站开发的实践意义全网媒体整合推广平台
  • 网站大幅广告wordpress 删除文章
  • 程序员给传销做网站站长统计网站
  • 网站虚拟建设策划姚家园做网站
  • 网页网站设计用什么软件织梦网做网站步骤
  • 云南网站建设费用重庆蒲公英网站建设公司怎么样
  • 企业网站策划实训广州网站定制开发
  • 上海做营销网站哪个公司好wordpress 博客 视频教程
  • 做直播网站效果图制作网站
  • 正规网站做菠菜广告ppt制作方法
  • 怎么做后台网站一键更新内蒙古企业网站制作
  • 手机网站内容模块广东响应式网站
  • 广州网站建站成都网站建设58
  • 企业如何申请网站建设精品课程网站的意义
  • 做网站卖酒ui设计零基础好学吗
  • 医院做网站定位西安公司注册代理
  • 做市场调查的网站免费中国建设企业网站官网
  • 做外贸生意用哪个网站最好公司网站建设软件下载
  • 做视频网站要注意什么什么网站教人做3d效果图
  • 做购物网站需要学数据库吗企业网络的设计与实现
  • 湖州住房和城乡建设厅网站游戏开发需要具备哪些技术