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

网站建设bbs重庆关键词排名推广

网站建设bbs,重庆关键词排名推广,广告公司网站官网,nas 做网站要想知道线程安全问题的原因及解决方案,首先得知道什么是线程安全,想给出一个线程安全的确切定义是复杂的,但我们可以这样认为:如果多线程环境下代码运行的结果是符合我们预期的,即在单线程环境应该的结果,…

                要想知道线程安全问题的原因及解决方案,首先得知道什么是线程安全,想给出一个线程安全的确切定义是复杂的,但我们可以这样认为:如果多线程环境下代码运行的结果是符合我们预期的,即在单线程环境应该的结果,则说这个程序是线程安全的。例如:使用两个线程分别对同一个变量进行修改,得出的结果与使用一个线程对这个变量进行修改的结果不同,这样的问题就可以说是该程序不是线程安全的。知道了什么是线程安全后,这样才好分析线程安全问题的原因及解决方案。

        原因1)多个线程之间的调度顺序是随机的,操作系统使用抢占式策略来执行线程(根本原因),并且该原因无法改变,当前主流的操作系统都是如此:例如当两个线程分别对同时一个变量count++,则会使每次得到的结果不同,因为CPU的调度是抢占式的,且count++实际上有着三步操作,这就将导致得到的结果不同。因为count++的三步操作为:

1. 从内存把数据读到 CPU
2. 进行数据更新
3. 把数据写回到 CPU
因此当多个线程进行count++时,就会导致如线程1刚进行完操作1后,线程2抢占了CPU,使得线程1没有及时将数据更新并将数据写回到CPU上,所以线程2读的数据与线程1读的数据相同,因此它们将数据更新后并写回到CPU也是相同,因此相当于count只进行了一次count++,
它们之中的顺序是任意的,因此得到的结果也是不确定的,但一定小于原本要得到的值(count++分别在多个线程中进行了多次)。
原因2)多个线程同时修改同一个变量,容易产生线程安全问题。可以通过调整代码结构进行避免。
原因3)修改操作不是原子的:原子性则是不可再分,如count++,可以分为三步操作。也可通过代码来进行封装成原子的来解决,也就是通过锁来进行互斥,使得有个线程操作时,别的线程不能进行操作。解决方法通常是加锁。
原因4)内存可见性引起的线程安全问题。当判断条件一个线程里面没有改变的话,那么编译器就会进行优化,令其只进行一次判断,后续就不再判断,倘若在另一个线程将其条件改变的话,但再这个线程里不会感觉的到,因此会继续按照之前的判断来进行。解决方法通常是对其条件进行volatile来进行修饰。
public static volatile int count = 0;//倘若没有volatile,则该代码会一直进行下去
public static void main(String[] args) throws InterruptedException {Thread t1 = new Thread(() -> {while(count == 0){;}});Thread t2 = new Thread(() -> {try {Thread.currentThread().sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}count = 1;});t1.start();t2.start();t1.join();
}
原因5)指令重排序引起的线程安全问题。
上述的例子的线程安全问题主要有原因1,2,3组成,因此,若想解决,我们只需给count++进行加锁就行。这样就使的count++操作变成原子的,当count++时,倘若又有一个线程要进行count++,就会产生阻塞,知道先进行count++的线程结束,另一个线程才能进行count++操作。
通常来说,大部分解决线程安全问题,只需要进行加锁就行。
http://www.mnyf.cn/news/41246.html

相关文章:

  • 升降平台找企汇优做网站推广日本域名注册
  • 北京住房及城乡建设部网站宁波网站推广专业服务
  • 创建网站的步骤是2021最近比较火的营销事件
  • 网站做推广有用什么网站都能打开的浏览器
  • 全网vip视频网站怎么做购买一个网站域名需要多少钱
  • 微信公众号授权给网站留手机号广告
  • 软工毕设做网站自建站模板
  • 学校网站建设都是谁做的今日小说排行榜
  • 公司搭建网站模板杭州seo培训
  • 怎样给网站或者商品做推广微信推广引流加精准客户
  • 动态网站建设 教程网络营销的特点有
  • 做网站 大文件优化防控措施
  • 西安专业手机网站建设价格网站开发框架
  • 呼叫中心客服系统无锡seo公司
  • 做网站要注册商标seo外包品牌
  • 长春网站制作招聘信息seo快速排名服务
  • 网站开发注销代码网站排名seo
  • 网站开发的简易步骤网站制作app
  • 足球比方类网站开发今日新闻内容摘抄
  • 大淘客网站上的推广怎么做广州seo工程师
  • 房产网签后能不能退房广告优化
  • 上海网站建设口碑最好的公司项目营销推广方案
  • 城乡建设局官网seo搜索引擎优化工资多少钱
  • 访问网站提示输入用户名密码今日小说排行榜百度搜索榜
  • 毕设如何做网站国内网站排名
  • 智能开关网站开发具体流程百度seo外包
  • wordpress统计工具绍兴seo排名
  • 网站备案证书下载失败爱站网长尾关键词搜索
  • html做企业门户网站北京百度seo排名点击软件
  • 2017年网站建设视频教程网络seo首页