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

专业的河南网站建设公司哪家好长沙营销推广

专业的河南网站建设公司哪家好,长沙营销推广,c 创建一个网站怎么做,商城网站建设包括哪些目录 一、原子性问题 1、带来原子性问题的原因 2、如何解决线程切换带来的原子问题 2.1、使用synchronized关键字来保证 2.2、使用CAS来保证原子性 2.3、使用lock锁来保证 一、原子性问题 1、带来原子性问题的原因 线程切换是带来原子的根本原因,java的并发程…

目录

一、原子性问题

1、带来原子性问题的原因

 2、如何解决线程切换带来的原子问题

2.1、使用synchronized关键字来保证

2.2、使用CAS来保证原子性

2.3、使用lock锁来保证


一、原子性问题

1、带来原子性问题的原因

线程切换是带来原子的根本原因,java的并发程序是基于多线程的,自然就会涉及到任务切换。而任务切换的时机是可以发生cpu的时间片结束时,由于目前我们使用的编程语言都是高级语言,一条高级语言往往是需要多条CPU指令完成的,例如count++,至少需要三条CPU指令。

  1. 指令1:首先需要把变量count从主内存中加载cpu的寄存器中
  2. 指令2:在寄存器中执行+1操作
  3. 指令3:将结果写入内存(缓存机制可能导致写入的是cpu的缓存而不是内存)

如下图所示,两个线程如果在执行count++的时候,过程如果发生了线程切换,会导致得不到预期的结果2,可能会出现意向不到结果,两个线程对count执行++操作后,在主内存中值为1. 

原子性的定义:原子性指一个操作是不可分割的,不可中断的,一个线程在执行时,另一个线程不会影响到他

private static int count;public static void increment(){try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}count++;}public static void main(String[] args) throws InterruptedException {Thread t1 = new Thread(() -> {for (int i = 0; i < 100; i++) {increment();}});Thread t2 = new Thread(() -> {for (int i = 0; i < 100; i++) {increment();}});t1.start();t2.start();t1.join();t2.join();System.out.println(count);}

 2、如何解决线程切换带来的原子问题

本质就是保存这块有非原子的操作语句,同一个时刻只能被一个线程访问到,并且对修改后的值,保证后续线程可见。通常的做法有:

2.1、使用synchronized关键字来保证

之前的increment()方法修改为如下方式:

	public static synchronized void increment(){try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}count++;}

2.2、使用CAS来保证原子性

使用CAS来解决的时候,如下所示:

	private static AtomicInteger atomicInteger = new AtomicInteger();public static void increment(){try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}atomicInteger.incrementAndGet();}

2.3、使用lock锁来保证

当我们使用锁来保证原子问题时,其示例代码如下:

private static int count = 0;public static  void increment(){ReentrantLock  reentrantLock = new ReentrantLock();try {reentrantLock.lock();Thread.sleep(10);count++;} catch (InterruptedException e) {e.printStackTrace();}finally {reentrantLock.unlock();}}

http://www.zhongyajixie.com/news/26873.html

相关文章:

  • 一个空间做两个网站的视频教程网站开发合同
  • 朝阳网站建设公司电话今日头条新闻大事件
  • 政府网站建设应该注意百度网首页登录入口
  • 网站地址和网页地址seo入门版
  • 响应式网站模板免费免费自建网站有哪些
  • 做网站多少宽带够时事新闻最新消息
  • 徐州网站开发兼职优化师是做什么的
  • 北京个人网站开发制作优化seo哪家好
  • 什么是营销型网站建设淘宝seo 优化软件
  • 企业网站建设内容 程序开发百度知道提问首页
  • 网站与系统对接图文方案竞价推广账户托管费用
  • 做外贸要有英文网站吗免费b2b信息发布网站
  • wordpress 中文摘要网络推广优化
  • 做阿里国际网站会有成效吗2024年8月爆发新的大流行病毒吗
  • 客户网站做供应商自荐有用吗网站流量统计系统
  • 宁波营销型网站建设优化建站小米的推广软文
  • 企业建设网站的价值软文范例大全800
  • 帮别人做买家秀的网站百度帐号登录入口
  • 吉林省软环境建设网站盘多多百度网盘搜索引擎
  • 10月哪个网站做电影票活动小学生抄写新闻20字
  • 湖州网站开发郑州粒米seo顾问
  • 郑州做网站公司汉狮价格windows优化大师免费
  • 有没有做策划案例的网站sem优化师
  • SEO与网站建设创意杭州网站建设网页制作
  • 网页设计与网站建设试题怎么让网站被百度收录
  • 青岛开发区网站建设哪家好北京网络营销推广公司
  • 上海比较好的网站制作公司seo的英文全称是什么
  • 邮件订阅 wordpressseo站群优化
  • 网站seo免费奖励自己的网站
  • 写网站教程关键词排名优化