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

网站门户建设方案网站建设艾瑞市场分析

网站门户建设方案,网站建设艾瑞市场分析,快速建立平台网站开发,上海企乐网站制作公司目录 线程安全的理解 线程不安全的原因 ①非原子性 ②可见性 ③代码重排序 体会何为不安全的线程 保证线程安全 一个代码在多线程的环境下就很容易出现错误. 线程安全的理解 线程安全是什么呢?通俗的来讲,线程安全就是在多线程的环境下,代码的结果是符合我们预期的,就…目录 线程安全的理解 线程不安全的原因 ①非原子性 ②可见性 ③代码重排序 体会何为不安全的线程  保证线程安全 一个代码在多线程的环境下就很容易出现错误. 线程安全的理解 线程安全是什么呢?通俗的来讲,线程安全就是在多线程的环境下,代码的结果是符合我们预期的,就可以称这个线程是安全的. 线程不安全的原因 ①非原子性 关于原子性: 原子是最小的粒子,不可被分割.所以,原子性就是代表一系列不能被分割的操作. 可以这样说,在一节开往学校的火车的10号车厢上.你因为喝了太多水,突然想上厕所.于是便走到10号车险的公共厕所上,开展了观察厕所是否有人,打开厕所门,进入厕所,关闭厕所门,上锁,上厕所,解锁,打开厕所门,走出厕所,关闭厕所门着这一系列的操作. 我们应该很容易理解这一系列操作有着原子性,既是是连续且不可被分割的吧.总不能在你进入厕所关上门后允许有人打开你的厕所门. 而上锁这一操作就很好的保持了这一系列的原子性,因为当你在厕所执行任务的时候,有人想要打开你的厕所门也进行不了这一操作.因为此时门被上锁了,是不可能被打开的.除非你在里面进行了解锁这一操作. 在java当中,原子性是一条语句吗?并不是的: int n 0; n;像是上面的代码的n语句,是不是就很容易被理解具有原子性. java是一门高级编程语言,在其之下的称之为汇编语言.在java中我们只是看到简单的n一条语句,而在汇编语言中他的代码大致逻辑是: 从内存把数据读取到cpu中进行数据的更新将新数据写回cpu中 因为进程里的线程的调度是具有随机性的,在你执行把数据更新完但还没有写回这一步的时候,调度到了另一个线程,而且新被调度到的线程也要使用这个变量.这时候就会发生不对等的情况. ②可见性 在我们线程的基础知识中提及到,同一个进程中的多个线程之间是具有关联性的,线程间也共享着同一个空间.在这一基础上:可见性指, 一个线程对共享变量值的修改能够及时地被其他线程看到. JMM内存模型: JMM模型是一个抽象的逻辑型,规定了一个进程中的所有变量都要存储在主内存中,进程中的线程又是共享同一个空间,所以说同一个线程中的所有线程都可以访问到主内存.同时,进程中的线程又有一个单独的工作内存. 当线程要读取一个主内存中的共享变量时,先要把主内存中的共享变量拷贝到工作内存中,再从工作内存中读取此数据当线程要更新一个主内存中的共享变量时,先要把主内存中的共享变量拷贝到工作内存中并进行更新拷贝过来的副本,再去更改主内存的共享变量  因为这个可见性的缘故,线程1要修改共享变量的时候,线程2的同一个变量的数据还没有得到更新.就会导致结果的偏差. ③代码重排序 JVM、CPU指令集会对代码进行优化 编译器对于指令重排序的前提是 保持逻辑不发生变化. 这一点在单线程环境下比较容易判断, 但 是在多线程环境下就没那么容易了, 多线程的代码执行复杂程度更高, 编译器很难在编译阶段对代 码的执行效果进行预测, 因此激进的重排序很容易导致优化后的逻辑和之前不等价 体会何为不安全的线程  public class Test {public static int n 0;public static void count(){n;}public static void main(String[] args) throws InterruptedException {//线程0Thread thread0 new Thread(() -{for(int i 0; i 10000; i){count();//每次调用,n1.预取:线程0能使n加上10000次}});//线程1Thread thread1 new Thread(() -{for(int i 0; i 10000; i){count();//每次调用,n1.预取:线程1能使n加上10000次}});thread0.start();//启动thread1.start();//等到线程0,线程1执行完成才去打印thread0.join();thread1.join();//我们的预期是,线程0加上10000,线程1加上10000.n为20000System.out.println(n);} } 出现的结果不符合我们期望,就是因为count方法中没有保持原子性,导致两个线程间同一数据读出和写出的步骤重合而最终的数据错误. 通俗的来说,在多线程环境下可能出现线程不安全的原因有: 线程是抢占式执行的,随机调度导致的多个线程修改同一个变量,会出现可见性的问题线程中的修改操作不是原子性的  保证线程安全 可以给一个代码块使用synchronized关键字进行修饰,达到了上锁的作用.保证其原子性 我们更新一下,在count方法上使用synchronized修饰.在每一个线程调用的时候,其他线程对于这个count方法都会变为阻塞状态,即不能调用这个方法. public static synchronized void count(){n;} 最后的结果,我们就可以很好的保证了预期结果的正确,达到了多线程环境下的安全.
http://www.dnsts.com.cn/news/36305.html

相关文章:

  • 公司网站建设入哪科目赣州的免费网站建设
  • 新津县建设局网站深圳手机商城网站设计
  • 公网ip做网站访问不网站要实现的电商功能
  • 出口退税在哪个网站做网站建设经费预算
  • 建设银行信用卡网站显示余额虾米WordPress
  • 网站建设属什么合同纯静态网站seo
  • 网站开发计划书网站技术解决方案怎么注册微信号
  • 房城乡建设部门户网站网站中qq跳转怎么做的
  • 计算机网站开发要考什么证wordpress 聊天对话框
  • 网站页脚代码小型企业网络搭建
  • 做自行车车队网站的名字商业推广软文范例
  • 国家建设材料检测网站同城配送网站建设
  • 织梦做不了视频网站免费网络推广软件有哪些
  • 自助网站建设方案家在深圳歌词
  • 宿迁网站网站建设宁波建设行业招聘信息网站
  • 郑州专业做淘宝网站门户网站开发费用
  • 产品展示型网站模板石家庄互联网公司有哪些
  • 合肥网站建站推广做平台网站外包多少钱啊
  • 购物车功能网站怎么做的类似58同城的网站怎么做
  • h5模板网站免费wordpress直播播放器
  • 站长统计网站大全企业网络管理方案
  • 山东省建设厅网站一体化平台营销方案100例
  • 空间业务建设网站wordpress安装地图代码
  • 电影院做羞羞的网站佛山建设企业网站
  • 2016年做网站好不好老河口网站建设
  • 爱用建站平台中小型网站建设讯息
  • 在线做爰a视频网站百度云做网站有优势吗
  • 彩票网站开发亿云可以刮刮卡的网站
  • 在线设计海报网站个人博客系统毕业设计论文
  • wordpress连接数据修改广州搜索排名优化