问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Java多线程之脏读代码示例及处理

发布网友 发布时间:2024-10-03 04:34

我来回答

1个回答

热心网友 时间:2024-10-18 13:39

上篇文章说到了同步异步。那么在应用中同步异步的应用时候,设计程序时候,一定要注意业务的整体性。也就是要注意上节学的资源的共享,则一定要同步。不然就会发生错误。比如经典的脏读(dirtyread)

脏读

概念:对于对象的同步和异步的方法,我们在设计自己的程序时,一定要考虑问题的整体性,不然就会出现数据不一致的错误,很经典的就是脏读问题

packagecom.wkcto.intrinsiclock;/***脏读*出现读取属性值出现了一些意外,读取的是中间值,而不是修改之后的值*出现脏读的原因是对共享数据的修改与对共享数据的读取不同步*解决方法:*不仅对修改数据的代码块进行同步,还要对读取数据的代码块同步*Author:老崔*/publicclassTest08{publicstaticvoidmain(String[]args)throwsInterruptedException{//开启子线程设置用户名和密码PublicValuepublicValue=newPublicValue();SubThreadt1=newSubThread(publicValue);t1.start();//为了确定设置成功Thread.sleep(100);//在main线程中读取用户名,密码publicValue.getValue();}//定义线程,设置用户名和密码staticclassSubThreadextendsThread{privatePublicValuepublicValue;publicSubThread(PublicValuepublicValue){this.publicValue=publicValue;}@Overridepublicvoidrun(){publicValue.setValue("bjpowernode","123");}}staticclassPublicValue{privateStringname="wkcto";privateStringpwd="666";publicsynchronizedvoidgetValue(){System.out.println(Thread.currentThread().getName()+",getter--name:"+name+",--pwd:"+pwd);}publicsynchronizedvoidsetValue(Stringname,Stringpwd){this.name=name;try{Thread.sleep(1000);//模拟操作name属性需要一定时间}catch(InterruptedExceptione){e.printStackTrace();}this.pwd=pwd;System.out.println(Thread.currentThread().getName()+",setter--name:"+name+",--pwd:"+pwd);}}}线程出现异常会自动释放锁packagecom.wkcto.intrinsiclock;/***同步过程中线程出现异常,会自动释放锁对象**Author:老崔*/publicclassTest09{publicstaticvoidmain(String[]args){//先创建Test01对象,通过对象名调用mm()方法Test09obj=newTest09();//一个线程调用m1()方法newThread(newRunnable(){@Overridepublicvoidrun(){obj.m1();//使用的锁对象是Test06.class}}).start();//另一个线程调用sm2()方法newThread(newRunnable(){@Overridepublicvoidrun(){Test09.sm2();//使用的锁对象是Test06.class}}).start();}//定义方法,打印100行字符串publicvoidm1(){//使用当前类的运行时类对象作为锁对象,可以简单的理解为把Test06类的字节码文件作为锁对象synchronized(Test09.class){for(inti=1;i<=100;i++){System.out.println(Thread.currentThread().getName()+"-->"+i);if(i==50){Integer.parseInt("abc");//把字符串转换为int类型时,如果字符串不符合数字格式会产生异常}}}}//使用synchronized修饰静态方法,同步静态方法,默认运行时类Test06.class作为锁对象publicsynchronizedstaticvoidsm2(){for(inti=1;i<=100;i++){System.out.println(Thread.currentThread().getName()+"-->"+i);}}}死锁packagecom.wkcto.intrinsiclock;/***死锁*在多线程程序中,同步时可能需要使用多个锁,如果获得锁的顺序不一致,可能会导致死锁*如何避免死锁?*当需要获得多个锁时,所有线程获得锁的顺序保持一致即可*Author:老崔*/publicclassTest10{publicstaticvoidmain(String[]args){SubThreadt1=newSubThread();t1.setName("a");t1.start();SubThreadt2=newSubThread();t2.setName("b");t2.start();}staticclassSubThreadextendsThread{privatestaticfinalObjectlock1=newObject();privatestaticfinalObjectlock2=newObject();@Overridepublicvoidrun(){if("a".equals(Thread.currentThread().getName())){synchronized(lock1){System.out.println("a线程获得了lock1锁,还需要获得lock2锁");synchronized(lock2){System.out.println("a线程获得lock1后又获得了lock2,可以想干任何想干的事");}}}if("b".equals(Thread.currentThread().getName())){synchronized(lock2){System.out.println("b线程获得了lock2锁,还需要获得lock1锁");synchronized(lock1){System.out.println("b线程获得lock2后又获得了lock1,可以想干任何想干的事");}}}}}}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女朋友送了我一块YAZOLE手表,是什么牌子? 化学会考考了个C,想要补考。 万一下次考考了个D的话,最终成绩是按C算... ...约了四次,见面时聊天也很热情,就是不主动发一条消息呢? ...六次之后发生了关系,那次之后他就没主动联系过我,每天都是我联系他... DVISION iView V60系统参数 TANDBERG 990 MXPTANDBERG 990 MXP介绍 适合小型会议室的视频会议一体机排行?求推荐一下适合的视频会议终端设备... 摩云致胜TrueSens摩云致胜TS6610-R 标清视频会议硬件终端 科达KDV7610科达KDV7610-系统参数 ...杨幂气质好、李沁清纯、刘亦菲仙气十足,你更喜欢谁? 34层哪些楼层好 奥迪空气悬挂故障 现在什么牌子的手机像素最高,尤其是前置摄像头,分别是多少?我最近想买... 广州买手机价格公道又有质量? 荣耀7里有个叫专业相机的图标代表什么 小白兔怎么养如何养殖小白兔 小白兔怎么养才不会死 小白兔如何养才不会死 街上买的小白兔怎么养好 广东天河城(集团)股份有限公司粤海喜来登酒店分公司怎么样? 行政诉讼为什么要引入 调解 和 和解 的问题 行政裁决后当事人自行和解法院准许吗 能上网,有Ip地址和子网掩码但网络连接提示受限制或无连接 梦幻西游龙宫打什么石头 ...就停在它的右下脚了,但我想在它的右上角输入文字, !您好 请问怎么让div不换行呢 我想让它跟在一些文字的后面 华为art-al00m是畅享10e吗 明日方舟先锋干员排名2021 最新先锋干员强度榜-新手攻略-安族网_百度... 关于女排的资料 女排相关介绍 世界上只有中国人喝热水,跟古人有关系吗 荣耀7照相图像无法充满屏幕 Java多线程内存读写 —— 内存屏障的理解 在广州买行货手机去哪好 ...购买的下月16号回家的高铁票,走的时候取票可以吗?还是必须现在去取... 概念不是空集是任何集合的子集么怎么真子集又对了?谢谢帮我 今天在网上订了一张几天后的高铁票,是订完之后可以直接提前去高铁站拿... 我在携程网买了一张高铁票,去取票的话要在发车前提前两个小时去取票吗... 【关于所得税申报的问题】所得税为负数,申报为零,如何调整? 天河有哪些大厦 ...申报中本年应补(退)的所得税额是负数,怎么改成零?麻烦了,谢谢啊_百 ... 广州体育西路附近有什么好玩的 怎么快速消除脸上的痘痘? 体育西路D口有哪些好玩的_体育西有什么好玩 ...真爱就是一种选择,决定对某个人只是给予,不求回报,不执着于他是否会... 天河区有哪些商场 哪些星座女最有希望嫁给男神 盐蒸橙子可以化痰吗 民法典规定拆迁后离婚财产怎么分 盐蒸橙子可以治疗咽喉炎吗 吃盐蒸橙子的注意事项 请问下载软件哪样最好?讯雷,快车,蚂蚁,影音,还是什么其它的? 联想Y9000P的显卡等于什么?