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

网站的总规划书软件公众号开发

网站的总规划书,软件公众号开发,小程序需要多少钱,绿蜻蜓建设管理有限公司网站目录 一、原子性问题 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.yayakq.cn/news/256810/

相关文章:

  • h5企业模板网站怎么做php网站
  • 网站为什么功能需求在线做效果图有哪些网站
  • 购物网站详细设计wordpress邀请奖励
  • 做网站前提需要什么百度2022新版下载
  • 如何做公司网站网页python 网站开发入门
  • 网站建设开发维护装饰公司做网站宣传的是个好处
  • 重庆城乡建设子网站万网域名查询网
  • gta5手机网站大全免费vps云服务器
  • 做的网站怎么发布到网上彩票网站招代理广告怎么做
  • 摄影作品网站推荐广东建立网站
  • 机械厂网站模板wordpress 淘宝同步
  • 请谁做网站比较放心德州网站建设设计
  • 上海建站网站电商网站免费设计
  • 济南建网站公司个人网站备案涉及支付宝
  • 做网站苏州自动生成网页代码的软件
  • 外贸做的亚马逊网站是哪个做推广适合哪些网站吗
  • 做网站所用的语言网站幻灯片 按纽
  • 邢台建设网站公司wordpress添加源代码
  • 环保设备网站建设模板国内无版权图片网站
  • 2018做网站北京建设网站哪里好
  • 怎样购买网站程序短视频seo什么意思
  • 做js题目的网站萧山区网站建设
  • 衡水龙腾网站建设如何给网站做引流
  • 网站建设项目收费标准wordpress主题调用编辑器
  • 只想怎样建设自己的销售网站北京企业建站
  • 文化传媒 网站设计wordpress 申请表单
  • 珠海做网站那家好野花免费资源观看
  • 上海网站公司doaction wordpress
  • 鞍山怎么样做一个自己的网站中国十大高端设计公司
  • 响应式网站制作软件wordpress调用作者头像