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

网页制作一个网站八个页面咋做最有效的宣传方式

网页制作一个网站八个页面咋做,最有效的宣传方式,公司网站定制,去除wordpress版本号背景:我们在实现单例模式的时候往往会忽略掉多线程的情况,就是写的代码在单线程的情况下是没问题的,但是一碰到多个线程的时候,由于代码没写好,就会引发很多问题,而且这些问题都是很隐蔽和很难排查的。 例子…

背景:我们在实现单例模式的时候往往会忽略掉多线程的情况,就是写的代码在单线程的情况下是没问题的,但是一碰到多个线程的时候,由于代码没写好,就会引发很多问题,而且这些问题都是很隐蔽和很难排查的。

例子1:没有volatile修饰的uniqueInstance

public class Singleton {private static Singleton uniqueInstance;private Singleton(){}public static Singleton getInstance(){if(uniqueInstance == null){ //#1synchronized(Singleton.class){ //#2if(uniqueInstance == null){ //#3uniqueInstance = new Singleton(); //#4System.out.println(Thread.currentThread().getName() + ": uniqueInstance is initalized..."); //#5.1} else {System.out.println(Thread.currentThread().getName() + ": uniqueInstance is not null now..."); //#5.2}}}return uniqueInstance;}
}
 1 public class TestSingleton {
 2     public static void main(final String[] args) throws InterruptedException {
 3         for (int i = 1; i <= 100000; i++) {
 4             final Thread t1 = new Thread(new ThreadSingleton());
 5             t1.setName("thread" + i);
 6             t1.start();
 7         }
 8     }
 9 
10     public static class ThreadSingleton implements Runnable {
11         @Override
12         public void run() {
13             Singleton.getInstance();
14         }
15     }
16 }

这里面的结果有可能会是:(没有真正重现过,太难模拟了)

1 thread2: uniqueInstance is initalized...
2 thread3: uniqueInstance is initalized...
Singleton被实例化两次了,和我们的单例模式设计期望值不一致:类永远只被实例化一次.

原因分析:
1. thread2进入#1, 这时子线程的uniqueInstance都是为空的,thread2让出CPU资源给thread3
2. thread3进入#1, 这时子线程的uniqueInstance都是为空的, thread3让出CPO资源给thread2
3. thread2会依次执行#2,#3,#4, #5.1,最终在thread2里面实例化了uniqueInstance。thread2执行完毕让出CPO资源给thread3
4. thread3接着#1跑下去,跑到#3的时候,由于#1里面拿到的uniqueInstance还是空(并没有及时从thread2里面拿到最新的),所以thread3仍然会执行#4,#5.1
5. 最后在thread2和thread3都实例化了uniqueInstance

例子2:用volatile修饰的uniqueInstance

这里就不贴重复的代码了,因为只是加多一个volatile来修饰成员变量:uniqueInstance,

但是结果却是正确的了, 其中一个可能结果:

 

thread2: uniqueInstance is initalized
thread3: uniqueInstance is not null now...

 

原因分析:

volatile(java5):可以保证多线程下的可见性;

读volatile:每当子线程某一语句要用到volatile变量时,都会从主线程重新拷贝一份,这样就保证子线程的会跟主线程的一致。

写volatile: 每当子线程某一语句要写volatile变量时,都会在读完后同步到主线程去,这样就保证主线程的变量及时更新。

1. thread2进入#1, 这时子线程的uniqueInstance都是为空的(java内存模型会从主线程拷贝一份uniqueInstance=null到子线程thread2),thread2让出CPU资源给thread3
2. thread3进入#1, 这时子线程的uniqueInstance都是为空的(java内存模型会从主线程拷贝一份uniqueInstance=null到子线程thread2), thread3让出CPO资源给thread2
3. thread2会依次执行#2,#3,#4, #5.1,最终在thread2里面实例化了uniqueInstance(由于是volatile修饰的变量,会马上同步到主线程的变量去)。thread2执行完毕让出CPO资源给thread3
4. thread3接着#1跑下去,跑到#3的时候,会又一次从主线程拷贝一份uniqueInstance!=null回来,所以thread3就直接跑到了#5.2
5. 最后在thread3不再会重复实例化uniqueInstance了

参考文章:如何在Java中使用双重检查锁实现单例

官方文档说明

深入理解Java内存模型(一)——基础

双重检查锁定与延迟初始化

转载于:https://www.cnblogs.com/damonhuang/p/5431866.html

http://www.lbrq.cn/news/2776717.html

相关文章:

  • 大兴网站建设多少钱知名做网站的公司
  • 免费建立自己的网站空间电工培训课程
  • 国内做网站大公司有哪些kj6699的seo综合查询
  • 南昌市经济技术开发区属于哪个区seo是广告投放吗
  • ps做网站首页怎么郑州百度推广外包
  • 网站的内部优化谷歌官网入口手机版
  • 做网站最好的公司加盟教育培训哪个好
  • 网站实施过程2024新闻热点事件
  • 哪些公司可以做网站西地那非片
  • 长春好的做网站公司排名免费培训机构管理系统
  • c网站建设网站制作工具
  • 启航做网站怎么样seo顾问服务 乐云践新专家
  • 怎样选wordpress主题关键词整站优化
  • 工程做网站精品成品网站1688
  • 青岛建设项目seo百科
  • 行政单位门户网站建设规定网络销售是什么工作内容
  • 昆明网站建设公司排名猫咪科技nba最新交易一览表
  • 我来做煮官方网站网络营销推广公司
  • 建设银行国际互联网站腾讯竞价广告
  • 网站建设策划实施要素yandex网站推广
  • 重庆网站建设外包哪家好天津百度推广公司电话
  • 国家城乡住房建设厅网站网络营销战略的内容
  • 信访举报网站建设建议seo推广代理
  • 集团公司网站 案例重庆seo顾问服务
  • 广州营销型网站北京seo优化方案
  • 兰州城乡建设局网站百度文库官网入口
  • 网站职位推荐怎么做百度应用商店官网
  • 做网站外包群免费创建属于自己的网站
  • 青岛网站建设小公司怎么做一个网站出来
  • 武汉手机模板建站淘客推广
  • 电源、电流及功率实测
  • 算法训练营day56 图论⑥ 108. 109.冗余连接系列
  • openldap安装 -添加条目
  • 【C语言16天强化训练】从基础入门到进阶:Day 2
  • 从零到GPT:Transformer如何引领大模型时代
  • 特赞内容运营解决方案,AI重构品牌内容价值链