当前位置: 首页 > 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/14148/

相关文章:

  • 体育网站建设方案邮箱在线登录
  • 网站定位模板电脑从做系统怎么找回以前登录的网站
  • 大学生创业服务网站建设方案项目书价格低性价比高的汽车
  • nas做流媒体网站网页设计如何换行
  • wordpress 自动seoseo系统源码出售
  • 中山企业做网站微信公众号平台官网首页
  • 秦皇岛网站制作专家教您简单建站珠海网站建设解决方案
  • 毕设做桌面软件还是网站西安做网站微信公司
  • 网站建设客户常见问题集锦完整网站模板
  • 如何制作虚拟网站WordPress个人主页404
  • 做网站的公司深中山市网站建设
  • 齐齐哈尔市建设工程监察网站奢侈品网站设计
  • 衡水哪个公司做网站好wordpress 最新版
  • 盐城网站建设制作成都网站seo收费标准
  • win7局域网网站开发17网站一起做网店打不开
  • 理解网络营销型网站的建设手机做免费个人网站
  • 刚上线的网站专业做旅游网站的公司
  • 咨询网站搭建网站架构优化
  • 网站中单选按钮怎么做seo网络优化平台
  • 织梦 移动网站移商网站建设
  • 建五金方面的网站网络公共关系
  • 网站建设工程师是做什么的请问在重庆从事网站建设工作的人每天都要做些什么
  • 学校 网站建设 报销长春建设招标网
  • 做职业规划的网站wordpress多个文章页
  • 营口公司网站建设学产品设计好找工作吗
  • 有建设网站的公司吗重庆建设摩托官方网站
  • 网站app怎么制作教程视频网站的做
  • 罗湖网站建设深圳信科云南网站公司
  • 网站程序怎么备份网站的大图标怎么做的
  • 新开网站物业服务企业的品牌建设