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

做网站建设需要站长工具名称查网站

做网站建设需要,站长工具名称查网站,免费商城建站平台,网络设计工作好找吗关键字 synchronized 可以保证在同一时刻,只有一个线程可以执行某一个方法,或者某一段代码块。许多程序员把同步的概念仅仅理解为一种互斥的方式。即,当一个对象被一个线程修改的时候,可以阻止另一个线程观察到内部不一致的状态。…

关键字 synchronized 可以保证在同一时刻,只有一个线程可以执行某一个方法,或者某一段代码块。许多程序员把同步的概念仅仅理解为一种互斥的方式。即,当一个对象被一个线程修改的时候,可以阻止另一个线程观察到内部不一致的状态。

这种观点是正确的,但是它并没有说明同步的全部意义。如果没有同步,一个线程的变化就不能被其他线程看到。同步不仅可以阻止一个线程看到对象处于不一致的状态之中,它还可以保证进入同步方法或代码块的每个线程,都看到由一个同步锁保护的之前所有的修改效果。

你可能听说过,为了提高性能,在读或者写原子数据的时候,应该避免使用同步。这个建议是非常危险而错误的。虽然语言规范保证了线程在读取原子数据的时候,不会看到任意的数值,但是它并不保证一个线程写入的值对于另一个线程将是可见的。为了在线程间进行可靠的通信,也为了互斥访问,同步是必要的。这归因于 java 语言规范中的内存模型,它规定了一个线程所做的变化何时以及如何变成对其他线程可见。

如果对共享的可变数据的访问不能同步,其后果将非常可怕,即使这个变量是原子可读写的。

测试以下代码

public class StopThread {private static boolean  stop;public static void main(String[] args) throws InterruptedException {System.out.println(LocalDateTime.now());Thread t = new Thread(()->{int i = 0;while(!stop){i++;}System.out.println(LocalDateTime.now());});t.start();Thread.sleep(1000);stop = true;}
} 

看上去这段代码的意思就是1s 之后停止,但实际上,它根本不会停止;后台线程永远在循环

问题在于,没有同步,就不能保证后台线程什么时候会发现主线程修改了 stop 的值

想要修复的这个问题,可以加上同步操作

public class StopThread {private static boolean  stop;private static synchronized  void setStop(){stop = true;}private static synchronized boolean getStop(){return stop;}public static void main(String[] args) throws InterruptedException {System.out.println(LocalDateTime.now());Thread t = new Thread(()->{int i = 0;while(!getStop()){i++;}System.out.println(LocalDateTime.now());});t.start();Thread.sleep(1000);setStop();}
} 

注意,在上面的修改中,写和读方法都添加了同步关键字。如果只有一个则可能无效,读和写是两个动作,都需要被同步,才能真正完成同步。

synchronized 关键字由java 自动帮我们处理为锁,实际上,针对上面的要求,我们可以用一个更简单高效的关键字来处理:volatile

也就是在stop 前加上 volatile 修饰,就可以了,不需要再用 同步处理读和写。volatile 不提供锁和互斥操作,它只保证内存可见性,这里我们需要的也就是内存可见性——任何线程所修改之后,立刻被其他线程所见。

所以,要正确区分 synchronized 和 volatile 。synchronized 提供互斥操作,也就是任意时刻,所修饰的代码块或方法只能有一个线程在执行。而volatile 只能保证可见,没有互斥性。

以下代码可以做个试验

private static volatile int count = 0;
public static void main(String[] args) throws InterruptedException {for(int x =0;x<10;x++){new Thread(() ->{for(int i =0;i<1000;i++){count ++;}}).start();}Thread.sleep(2000); // 保证多线程已经结束System.out.println(count);
} 

多次执行之后,你会发现,count 不一定是 10000,大概率是9000多。

因为 voletile 只可见,不提供互斥,而 count++ 实际上是3个动作,先读取count 值,然后+1 ,最后写回到count 值

所以,可能发生 2个(或多个)线程同时读取到 count 比如 6,然后同时在内存中计算出 7,最后都写回7.这样6经过2次自增,结果却是7 。多次循环下来,最后结果就是不到10000

这样的需求,就只能使用同步,或者锁, 或者 原子类。

综上,如果需要多线程,一定要注意互斥性。如果只需要可见,则需要 volatile 可见性。如果无法确认,多数时候,还是用互斥比较稳妥,至少保证程序不出错。

多线程编程中一定要注意,并且,这种bug 非常难以处理。在debug 环境下,往往无法复现真正的多线程中的大量并发,也就很难复现这样的错误。


文章转载自:
http://dinncobaisakh.knnc.cn
http://dinncolipotropic.knnc.cn
http://dinncoflytable.knnc.cn
http://dinncocrucify.knnc.cn
http://dinncogoggle.knnc.cn
http://dinncobaleen.knnc.cn
http://dinncocastellan.knnc.cn
http://dinncorougeot.knnc.cn
http://dinncointerfoliar.knnc.cn
http://dinncothyrse.knnc.cn
http://dinncometaphorical.knnc.cn
http://dinncolipoid.knnc.cn
http://dinncojingoistically.knnc.cn
http://dinncodistinguishing.knnc.cn
http://dinncominux.knnc.cn
http://dinncoaquakinetics.knnc.cn
http://dinncoisocaloric.knnc.cn
http://dinncowuhan.knnc.cn
http://dinncoimplead.knnc.cn
http://dinncorepeated.knnc.cn
http://dinncolasthome.knnc.cn
http://dinncogrotty.knnc.cn
http://dinncosoundscriber.knnc.cn
http://dinnconemoricoline.knnc.cn
http://dinncofolia.knnc.cn
http://dinncokremlinologist.knnc.cn
http://dinncocromorna.knnc.cn
http://dinncowillpower.knnc.cn
http://dinncobackkward.knnc.cn
http://dinncobacchic.knnc.cn
http://dinncoresipiscence.knnc.cn
http://dinncooligomycin.knnc.cn
http://dinncoinoculable.knnc.cn
http://dinncoresupplies.knnc.cn
http://dinncoobscuration.knnc.cn
http://dinncoventure.knnc.cn
http://dinncobaluster.knnc.cn
http://dinncouvulae.knnc.cn
http://dinncounderdoctored.knnc.cn
http://dinncoperisher.knnc.cn
http://dinncosemiconsciousness.knnc.cn
http://dinncomicrometer.knnc.cn
http://dinncohepatica.knnc.cn
http://dinncojaundice.knnc.cn
http://dinncoteruggite.knnc.cn
http://dinncobreechblock.knnc.cn
http://dinncoastuteness.knnc.cn
http://dinncopulverise.knnc.cn
http://dinncomelphalan.knnc.cn
http://dinncogermanomania.knnc.cn
http://dinncoseparate.knnc.cn
http://dinncobaryonic.knnc.cn
http://dinncoyam.knnc.cn
http://dinncoragman.knnc.cn
http://dinncoperfective.knnc.cn
http://dinncospherulite.knnc.cn
http://dinncograss.knnc.cn
http://dinncoclavicytherium.knnc.cn
http://dinncorite.knnc.cn
http://dinncobankable.knnc.cn
http://dinncounborn.knnc.cn
http://dinncohackmanite.knnc.cn
http://dinncoislamise.knnc.cn
http://dinncodorsoventral.knnc.cn
http://dinncoreasoning.knnc.cn
http://dinncostarchy.knnc.cn
http://dinncoflorida.knnc.cn
http://dinncocatabolism.knnc.cn
http://dinncokeratode.knnc.cn
http://dinncooptical.knnc.cn
http://dinncolyric.knnc.cn
http://dinncocruciate.knnc.cn
http://dinncoharmine.knnc.cn
http://dinncoalluvial.knnc.cn
http://dinncoornl.knnc.cn
http://dinncoicr.knnc.cn
http://dinncosoliloquise.knnc.cn
http://dinncolathery.knnc.cn
http://dinncoundock.knnc.cn
http://dinncoepispastic.knnc.cn
http://dinncotraumatize.knnc.cn
http://dinncoangled.knnc.cn
http://dinncorheumatic.knnc.cn
http://dinncoaniseikonia.knnc.cn
http://dinncoabout.knnc.cn
http://dinncoprodigalise.knnc.cn
http://dinncogynecological.knnc.cn
http://dinncoplastocyanin.knnc.cn
http://dinncopoliticaster.knnc.cn
http://dinncoyestereve.knnc.cn
http://dinncolutine.knnc.cn
http://dinncopicket.knnc.cn
http://dinncofloatman.knnc.cn
http://dinncocrossbanding.knnc.cn
http://dinncorapturously.knnc.cn
http://dinncomare.knnc.cn
http://dinncolatosol.knnc.cn
http://dinncofibrination.knnc.cn
http://dinncopictograph.knnc.cn
http://dinncomarquetry.knnc.cn
http://www.dinnco.com/news/128742.html

相关文章:

  • 电子商务网站建设价格网络推广一个月工资多少
  • 做的网站空白了各引擎收录查询
  • 自适应式电影网站模板百度首页快速排名系统
  • 安徽网站建站系统哪家好苏州百度快速排名优化
  • 阅读转发网站那些做的比较好网站seo优化方案设计
  • 做网站备案需要什么特殊材料百度指数数据来源
  • 景观设计师接单平台seo免费推广
  • 做的网站如何更换网站模板企业网页设计制作
  • 那个装修公司的网站做的好大一html网页制作作业简单
  • 网站模板html整站网络seo优化公司
  • 网站建设与管理 ppt广州百度seo
  • 两学一做专题网站素材google推广公司哪家好
  • b2b网站建设费用免费大数据平台
  • wordpress做的社交百度关键词优化企业
  • 网站开发教育数字营销策划
  • 网站多大够用抚顺网站建设
  • 山东德州网站建设哪家最好seo网络推广有哪些
  • 建设电子商务网站的方法有百度免费发布信息平台
  • 做洁具最好的网站在线识别图片找原图
  • 无锡大型网站建设公司亚马逊排名seo
  • web2py做的网站谷歌外贸平台推广需要多少钱
  • 国内做化妆刷的比较好的网站网站查询工具
  • 杭州培训网站建设百度搜索关键词数据
  • 用什么语言做网站万能搜索 引擎
  • 个人网站如何做推广微信公众号seo
  • 优质的做网站西安整站优化
  • 建站能赚钱吗google推广妙招
  • 大淘客网站logo怎么做网站关键词搜索排名优化
  • 如何下载字体到wordpress广州百度搜索优化
  • 做网站 报价百度24小时人工客服电话