当前位置: 首页 > news >正文 商用高端网站设计新感觉建站创建网站的三种方法 news 2025/10/24 23:59:48 商用高端网站设计新感觉建站,创建网站的三种方法,太原提高网站排名,做招聘网站没有数据笔者在上篇文章介绍了线程安全的问题#xff0c;接下来本篇文章就是来讲解如何避免线程安全问题~~ 前言#xff1a;创建两个线程#xff0c;每个线程都实现对同一个变量count各自自增5W次#xff0c;我们来看一下代码#xff1a; class Counter{private int count0;publi…笔者在上篇文章介绍了线程安全的问题接下来本篇文章就是来讲解如何避免线程安全问题~~ 前言创建两个线程每个线程都实现对同一个变量count各自自增5W次我们来看一下代码 class Counter{private int count0;public void add(){count;}public int get(){return count;} } public class Main2 {public static void main(String[] args) throws InterruptedException{Counter counternew Counter();//搞两个线程两个线程分别对这个count自增5W次//线程1Thread t1new Thread(()-{for (int i 0; i 50000; i) {counter.add();}});//线程2Thread t2new Thread(()-{for (int i 0; i 50000; i) {counter.add();}});//启动线程t1.start();t2.start();//等待两个线程执行结束然后看一下结果t1.join();t2.join();System.out.println(counter.get());//预期结果是10W但是实际结果像是一个随机值每次执行的结果都不一样} } 上述代码的运行结果是不确定的是一个随即值多次刷新重新运行结果大概率是不一样的~预期效果个代码的运行结果不一样这就是Bug——》线程安全问题 通过加锁来有效避免线程安全问题 Synchronized是Java中的关键字可以使用这个关键字来实现加锁的效果~ public void add(){// count;synchronized (this){//这里的this可以写任意一个Object对象基本数据类型不可//此处写了this就相当于Counter counternew Counter();中的countercount;}}那么我们来看一下此时代码的运行结果~ 符合我们预期的一个效果~ 锁有两个核心的操作加锁和解锁 此处使用代码块的方式来表示进入synchronized修饰的代码块的时候就会触发加锁出了synchronized代码块就会触发解锁{ }就相当于WC~~ 在上述代码中synchronized(this)——》this是指锁对象在针对哪个对象 如果两个线程针对同一个对象加锁此时就会出现“锁竞争”一个线程先拿到锁另一个线程阻塞等待 如果两个线程针对不同的对象加锁此时不好存在锁竞争各种获取各自锁即可 加锁本质上是把并发的变成了串行的~ join()和加锁不一样 join()是让两个线程完整的进行串行~ 加锁是让两个线程的某小部分串行了大部分都是并发的 加锁在保证线程安全的前提下同时还能够让代码跑的更快一些更好的利用CPU无论如何加锁都可能导致阻塞代码阻塞对应程序的效率肯定还是会有影响的此处虽然加锁了比不加锁要慢点肯定还是比串行要更快同时比不加锁算得更准 如果直接给方法使用synchronized修饰此时就相当于this为加锁对象 如果synchronized修饰静态方法static()此时就算不给this加锁了而是给类对象加锁 更常见的还是自己手动指定一个锁对象 //自己手动指定锁对象private Object lockernew Object();public void add(){synchronized (locker){//这里的locker可以写任意一个Object对象基本数据类型不可count;}}要牢记如果多个线程尝试对同一对象加锁此时就会产生锁竞争针对不同的锁对象加锁就不会有锁竞争~ 另一个线程不安全的场景由于内存可见性所引起的线程不安全~ 先写一个带有Bug的代码 import java.util.Scanner;public class Main3 {public static int flag0;public static void main(String[] args) {Thread t1new Thread(()-{while (flag0){//空着啥都没有}System.out.println(循环结束t1结束);});Thread t2new Thread(()-{Scanner scannernew Scanner(System.in);System.out.println(请输入一个整数 );flagscanner.nextInt();});t1.start();t2.start();} } 对该段代码的预期效果t1通过flag0作为条件进行循环初始情况下将进入循环t2通过控制台输入一个整数一旦用户输入非0的值此时t1的循环就会立即结束从而t1线程退出 但是实际的效果输入非0的值之后t1线程并没有退出循环没有结束通过jconsole可以看到t1线程仍然在执行处在RUNNABLE状态。 实际效果 预期效果——》这就是Bug 为啥有这个问题这就是内存可见性的锅 所谓的内存可见性就是多线程环境下编辑器对于代码优化产生了误判从而引起了Bug进一步导致了咱们的Bug咱们的处理方式就是让编辑器针对这个场景暂停优化使用Volatile关键字被volatile修饰的变量此时编辑器就会紧张上述优化从而能够确保每次都是从内存中重新读取数据~ 即针对上述代码的更改 volatile public static int flag0;加上volatile关键字之后此时编辑器就能够保证每次都是重新从内存读取flag变量的值此时t2修饰flagt1就可以立即感知到了因此t1就可以正确退出了~ volatile不保证原子性注意 volatile适用的场景是一个线程读一个线程写的情况 synchronized则是多个线程写 volatile的这个效果称为“保证内存可见性” synchronized不确定能不能保证内存可见性 volatile还有一个效果禁止指令重排序指令重排序也是编辑器优化的策略调整了代码执行的顺序让程序更高效前台也是保证整体逻辑不变 关于volatile和内存可见性的补充~ 网上有效资料线程修改一个变量会把这个变量先从主内存读取到工作内存然后修改工作内存的值再写回到主内存中~ 内存可见性t1频繁读取主内存效率比较低就被优化成直接读取自己的工作内存t1修改了主内存的结果由于t1没有读取主内存导致修改不能被识别到 工作内存《——》CPU寄存器 主内存《——》内存 文章转载自: http://www.morning.kfyqd.cn.gov.cn.kfyqd.cn http://www.morning.jghqc.cn.gov.cn.jghqc.cn http://www.morning.nkrmh.cn.gov.cn.nkrmh.cn http://www.morning.pjjkz.cn.gov.cn.pjjkz.cn http://www.morning.swimstaracademy.cn.gov.cn.swimstaracademy.cn http://www.morning.yrflh.cn.gov.cn.yrflh.cn http://www.morning.yrdn.cn.gov.cn.yrdn.cn http://www.morning.pndw.cn.gov.cn.pndw.cn http://www.morning.rdzlh.cn.gov.cn.rdzlh.cn http://www.morning.rfrxt.cn.gov.cn.rfrxt.cn http://www.morning.qfths.cn.gov.cn.qfths.cn http://www.morning.pamdeer.com.gov.cn.pamdeer.com http://www.morning.fktlg.cn.gov.cn.fktlg.cn http://www.morning.nxwk.cn.gov.cn.nxwk.cn http://www.morning.nspzy.cn.gov.cn.nspzy.cn http://www.morning.pffqh.cn.gov.cn.pffqh.cn http://www.morning.hrnrx.cn.gov.cn.hrnrx.cn http://www.morning.ydyjf.cn.gov.cn.ydyjf.cn http://www.morning.ltbwq.cn.gov.cn.ltbwq.cn http://www.morning.snmth.cn.gov.cn.snmth.cn http://www.morning.fmqw.cn.gov.cn.fmqw.cn http://www.morning.shuangxizhongxin.cn.gov.cn.shuangxizhongxin.cn http://www.morning.ktsth.cn.gov.cn.ktsth.cn http://www.morning.rhgtc.cn.gov.cn.rhgtc.cn http://www.morning.pfgln.cn.gov.cn.pfgln.cn http://www.morning.cwtrl.cn.gov.cn.cwtrl.cn http://www.morning.ckhyj.cn.gov.cn.ckhyj.cn http://www.morning.qxwrd.cn.gov.cn.qxwrd.cn http://www.morning.mlzyx.cn.gov.cn.mlzyx.cn http://www.morning.trhlb.cn.gov.cn.trhlb.cn http://www.morning.zcxjg.cn.gov.cn.zcxjg.cn http://www.morning.ppbrq.cn.gov.cn.ppbrq.cn http://www.morning.dshkp.cn.gov.cn.dshkp.cn http://www.morning.jjwzk.cn.gov.cn.jjwzk.cn http://www.morning.mpwgs.cn.gov.cn.mpwgs.cn http://www.morning.rytps.cn.gov.cn.rytps.cn http://www.morning.xkppj.cn.gov.cn.xkppj.cn http://www.morning.kcbml.cn.gov.cn.kcbml.cn http://www.morning.wtdyq.cn.gov.cn.wtdyq.cn http://www.morning.txmlg.cn.gov.cn.txmlg.cn http://www.morning.tpqzs.cn.gov.cn.tpqzs.cn http://www.morning.hsksm.cn.gov.cn.hsksm.cn http://www.morning.pjtw.cn.gov.cn.pjtw.cn http://www.morning.ygrdb.cn.gov.cn.ygrdb.cn http://www.morning.qngcq.cn.gov.cn.qngcq.cn http://www.morning.nmymn.cn.gov.cn.nmymn.cn http://www.morning.sldrd.cn.gov.cn.sldrd.cn http://www.morning.xkhxl.cn.gov.cn.xkhxl.cn http://www.morning.xstfp.cn.gov.cn.xstfp.cn http://www.morning.mhcft.cn.gov.cn.mhcft.cn http://www.morning.mqss.cn.gov.cn.mqss.cn http://www.morning.dqxph.cn.gov.cn.dqxph.cn http://www.morning.w58hje.cn.gov.cn.w58hje.cn http://www.morning.ztfzm.cn.gov.cn.ztfzm.cn http://www.morning.mfjfh.cn.gov.cn.mfjfh.cn http://www.morning.bfjtp.cn.gov.cn.bfjtp.cn http://www.morning.fkflc.cn.gov.cn.fkflc.cn http://www.morning.mgfnt.cn.gov.cn.mgfnt.cn http://www.morning.rcjqgy.com.gov.cn.rcjqgy.com http://www.morning.qwgct.cn.gov.cn.qwgct.cn http://www.morning.xdnhw.cn.gov.cn.xdnhw.cn http://www.morning.dfffm.cn.gov.cn.dfffm.cn http://www.morning.lsgjf.cn.gov.cn.lsgjf.cn http://www.morning.qfwzm.cn.gov.cn.qfwzm.cn http://www.morning.rtbhz.cn.gov.cn.rtbhz.cn http://www.morning.pdtjj.cn.gov.cn.pdtjj.cn http://www.morning.rntgy.cn.gov.cn.rntgy.cn http://www.morning.qmmfr.cn.gov.cn.qmmfr.cn http://www.morning.sjwzl.cn.gov.cn.sjwzl.cn http://www.morning.gzzncl.cn.gov.cn.gzzncl.cn http://www.morning.khfk.cn.gov.cn.khfk.cn http://www.morning.glswq.cn.gov.cn.glswq.cn http://www.morning.qfqld.cn.gov.cn.qfqld.cn http://www.morning.qxjck.cn.gov.cn.qxjck.cn http://www.morning.wgzzj.cn.gov.cn.wgzzj.cn http://www.morning.kspfq.cn.gov.cn.kspfq.cn http://www.morning.kghhl.cn.gov.cn.kghhl.cn http://www.morning.hfxks.cn.gov.cn.hfxks.cn http://www.morning.htsrm.cn.gov.cn.htsrm.cn http://www.morning.qhkx.cn.gov.cn.qhkx.cn 查看全文 http://www.tj-hxxt.cn/news/246687.html 相关文章: 做好网站怎么做app服务app开发的公司 杭州个人做网站大数据平台网站建设 企业网站建设要佛山市顺德区建设局网站 网站平台建设缴纳什么税高级seo优化招聘 毕业设计可以做哪些简单网站家政网站模板 哪个网站做pptseo短视频网页入口引流在线看 网站设计步骤及流程小企业网站制作 小学电教检查网站建设资料衡阳市建设局网站 局域网建设简单的影视网站做盗版网站 做教育网站多少钱官方网站链接如何做 网站开发可以学吗wordpress打开过慢 免费室内设计网站都有哪些做asp网站的实验收获 php网站制作费用博物馆建设网站的目的及功能 网站建设方案基本流程青羊区定制网站建设报价 沈阳做网站 0诚金网络专业wordpress好用的模板 网站制作专业唐山建设工程造价信息网站 济南网站建设q479185700惠网站开发的目的 免费推广网站在线观看中山市 做网站 北京专业企业网站建设网站后台界面 免费wordpress网站计算机网站建设及管理 重庆商会网站建设cms开源网站管理系统 博客网站开发毕设360开户推广 河北定制网站建设调试专业团队值得信赖 电商网站建设思维导图提供温州手机网站制作哪家好 做php网站开发能赚钱吗建设工程合同通用条款范本2017 网站域名查主机名成都市建设厅网站查询 云南网站建设优选平台建站 seo课程 佛山智能网站建设地址设计求网站建设方法 短视频网站的动画是怎么做的经典网站设计 外贸网站建设 全球搜网络系统管理员获取ip