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

茌平网站建设企业网站制作哪家好

茌平网站建设,企业网站制作哪家好,山西太原做网站,wordpress主JAVA同步代码块 & 同步方法 为了解决多线程操作共享数据时产生的安全问题 例如以下代码 if (ticket < 0) {// 卖完了break; } else {ticket--;System.out.println(Thread.currentThread().getName() "在卖票&#xff0c;还剩下" ticket "张")…

JAVA同步代码块 & 同步方法

为了解决多线程操作共享数据时产生的安全问题

例如以下代码

if (ticket <= 0) {// 卖完了break;
} else {ticket--;System.out.println(Thread.currentThread().getName() + "在卖票,还剩下" + ticket + "张");
}

如果两个线程同时执行以上方法,同时访问或修改共享的变量ticket,就有可能会出现安全问题。

例如:

出现重复票

窗口三在卖票,还剩下98张
窗口一在卖票,还剩下98张
窗口一在卖票,还剩下96张
窗口三在卖票,还剩下95张
窗口二在卖票,还剩下95

原因:几个线程可能同时执行System.out.println(Thread.currentThread().getName() + "在卖票,还剩下" + ticket + "张");

出现负数票

窗口一在卖票,还剩下0张
窗口三在卖票,还剩下-1

原因:两个线程都在执行else语句前检查了ticket是大于0的。

JAVA中,可以使用同步代码块同步方法来解决以上问题。

同步代码块

为了解决以上问题,可以使用同步代码块实现锁定多条语句,以独立操作共享数据。

格式:

synchronized(任意对象) {多条语句操作共享数据的代码
}

需要对象作为一个锁,只要有一个线程进去执行代码了,这个对象就会被锁住。
当线程执行完出来了,才会自动为这个对象解锁。
若对象被锁住了,线程就无法继续执行,直到这个对象被解锁。

因此,为了使只能同时有一个线程执行语句,只能是同一个对象作为synchronized的参数。

相当于一个房间只有一个门,有一个线程进去了就会锁上门,其他线程进不去。完成后再出门解锁。
若多个线程synchronized的参数是几个不同的对象,就相当于一个房间有几个门,各自都可以通过自己的门进出,起不到隔离的作用。

修改后的代码如下

public class Ticket implements Runnable {// 票的对象private int ticket = 100;private Object obj = new Object();public void run() {while (true) {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}synchronized (obj) {if (ticket <= 0) {// 卖完了break;} else {ticket--;System.out.println(Thread.currentThread().getName() + "在卖票,还剩下" + ticket + "张");}}}}
}
public class demo {public static void main(String[] args) {Ticket ticket = new Ticket();Thread t1 = new Thread(ticket);Thread t2 = new Thread(ticket);Thread t3 = new Thread(ticket);t1.setName("窗口一");t2.setName("窗口二");t3.setName("窗口三");t1.start();t2.start();t3.start();}
}

同步方法

与同步代码块不同的是,同步方法不需要指定锁对象,而且同步方法可以锁住方法中所有代码,故同时只能有一个线程运行同步方法中的代码。

格式:

修饰符 synchronized 返回值类型 方法名(方法参数) {}

使用示例如下:

public class Ticket implements Runnable {// 票的对象private int ticket = 100;public void run() {while (true) {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}if (soldout()) {break;}}}public synchronized boolean soldout() {if (ticket <= 0) {// 卖完了return true;} else {ticket--;System.out.println(Thread.currentThread().getName() + "在卖票,还剩下" + ticket + "张");}return false;}
}

运行结果:

/Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home/bin/java -javaagent:/Users/doubleq666/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/223.8617.56/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=61509:/Users/doubleq666/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/223.8617.56/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath /Users/doubleq666/Documents/IdeaProjects/Semaphore/Semaphore/out/production/Semaphore SynchronizedDemo.demo
窗口一在卖票,还剩下99张
窗口三在卖票,还剩下98张
窗口二在卖票,还剩下97张
窗口二在卖票,还剩下96张
窗口三在卖票,还剩下95张
窗口一在卖票,还剩下94张
窗口二在卖票,还剩下93张
窗口三在卖票,还剩下92张
窗口一在卖票,还剩下91张
窗口三在卖票,还剩下90张
窗口一在卖票,还剩下89张
窗口二在卖票,还剩下88张
窗口二在卖票,还剩下87张
窗口三在卖票,还剩下86张
窗口一在卖票,还剩下85张
窗口三在卖票,还剩下84张
窗口一在卖票,还剩下83张
窗口二在卖票,还剩下82张
窗口二在卖票,还剩下81张
窗口三在卖票,还剩下80张
窗口一在卖票,还剩下79张
窗口二在卖票,还剩下78张
窗口三在卖票,还剩下77张
窗口一在卖票,还剩下76张
窗口二在卖票,还剩下75张
窗口三在卖票,还剩下74张
窗口一在卖票,还剩下73张
窗口二在卖票,还剩下72张
窗口三在卖票,还剩下71张
窗口一在卖票,还剩下70张
窗口二在卖票,还剩下69张
窗口一在卖票,还剩下68张
窗口三在卖票,还剩下67张
窗口二在卖票,还剩下66张
窗口一在卖票,还剩下65张
窗口三在卖票,还剩下64张
窗口二在卖票,还剩下63张
窗口一在卖票,还剩下62张
窗口三在卖票,还剩下61张
窗口二在卖票,还剩下60张
窗口一在卖票,还剩下59张
窗口三在卖票,还剩下58张
窗口二在卖票,还剩下57张
窗口一在卖票,还剩下56张
窗口三在卖票,还剩下55张
窗口二在卖票,还剩下54张
窗口一在卖票,还剩下53张
窗口三在卖票,还剩下52张
窗口二在卖票,还剩下51张
窗口一在卖票,还剩下50张
窗口三在卖票,还剩下49张
窗口二在卖票,还剩下48张
窗口一在卖票,还剩下47张
窗口三在卖票,还剩下46张
窗口二在卖票,还剩下45张
窗口三在卖票,还剩下44张
窗口一在卖票,还剩下43张
窗口二在卖票,还剩下42张
窗口三在卖票,还剩下41张
窗口一在卖票,还剩下40张
窗口二在卖票,还剩下39张
窗口三在卖票,还剩下38张
窗口一在卖票,还剩下37张
窗口二在卖票,还剩下36张
窗口三在卖票,还剩下35张
窗口一在卖票,还剩下34张
窗口二在卖票,还剩下33张
窗口三在卖票,还剩下32张
窗口一在卖票,还剩下31张
窗口二在卖票,还剩下30张
窗口三在卖票,还剩下29张
窗口一在卖票,还剩下28张
窗口二在卖票,还剩下27张
窗口三在卖票,还剩下26张
窗口一在卖票,还剩下25张
窗口二在卖票,还剩下24张
窗口三在卖票,还剩下23张
窗口一在卖票,还剩下22张
窗口二在卖票,还剩下21张
窗口三在卖票,还剩下20张
窗口一在卖票,还剩下19张
窗口二在卖票,还剩下18张
窗口三在卖票,还剩下17张
窗口一在卖票,还剩下16张
窗口二在卖票,还剩下15张
窗口三在卖票,还剩下14张
窗口一在卖票,还剩下13张
窗口二在卖票,还剩下12张
窗口三在卖票,还剩下11张
窗口一在卖票,还剩下10张
窗口二在卖票,还剩下9张
窗口三在卖票,还剩下8张
窗口一在卖票,还剩下7张
窗口二在卖票,还剩下6张
窗口三在卖票,还剩下5张
窗口一在卖票,还剩下4张
窗口二在卖票,还剩下3张
窗口三在卖票,还剩下2张
窗口一在卖票,还剩下1张
窗口二在卖票,还剩下0Process finished with exit code 0

文章转载自:
http://dinncocacogenics.wbqt.cn
http://dinncomultilist.wbqt.cn
http://dinncoboarder.wbqt.cn
http://dinncogenerically.wbqt.cn
http://dinncopekin.wbqt.cn
http://dinncodiaphanous.wbqt.cn
http://dinncoellipticity.wbqt.cn
http://dinncoquale.wbqt.cn
http://dinncoexorcise.wbqt.cn
http://dinncoredact.wbqt.cn
http://dinncohypermarket.wbqt.cn
http://dinncoadmirably.wbqt.cn
http://dinncoaccomplished.wbqt.cn
http://dinncohebe.wbqt.cn
http://dinncoclarification.wbqt.cn
http://dinncoopacus.wbqt.cn
http://dinncohuanaco.wbqt.cn
http://dinncounsophisticate.wbqt.cn
http://dinncohydrocephaloid.wbqt.cn
http://dinncozoophytology.wbqt.cn
http://dinncofilariasis.wbqt.cn
http://dinncobarrett.wbqt.cn
http://dinncosynchromesh.wbqt.cn
http://dinncobanger.wbqt.cn
http://dinncobailiwick.wbqt.cn
http://dinncolater.wbqt.cn
http://dinncophytobenthon.wbqt.cn
http://dinncohyperirritable.wbqt.cn
http://dinncoradwaste.wbqt.cn
http://dinncoparameterize.wbqt.cn
http://dinncohercynian.wbqt.cn
http://dinncogalloping.wbqt.cn
http://dinnconelumbo.wbqt.cn
http://dinncoepitaxy.wbqt.cn
http://dinncobreathed.wbqt.cn
http://dinncowristlock.wbqt.cn
http://dinncoprogrammetry.wbqt.cn
http://dinncoprebiologic.wbqt.cn
http://dinncomeaningly.wbqt.cn
http://dinncohoop.wbqt.cn
http://dinncosice.wbqt.cn
http://dinncovar.wbqt.cn
http://dinncoprance.wbqt.cn
http://dinncomisdescription.wbqt.cn
http://dinncolimewood.wbqt.cn
http://dinncotelefilm.wbqt.cn
http://dinncochairman.wbqt.cn
http://dinncotrochophore.wbqt.cn
http://dinncohydromantic.wbqt.cn
http://dinncomodiste.wbqt.cn
http://dinncoevents.wbqt.cn
http://dinncoeurythmy.wbqt.cn
http://dinncoraconteuse.wbqt.cn
http://dinncohypophysial.wbqt.cn
http://dinncomouthbrooder.wbqt.cn
http://dinncovariational.wbqt.cn
http://dinncoteleset.wbqt.cn
http://dinncohommock.wbqt.cn
http://dinncographematic.wbqt.cn
http://dinncosagbag.wbqt.cn
http://dinncoinguinal.wbqt.cn
http://dinncospadix.wbqt.cn
http://dinncodermatozoon.wbqt.cn
http://dinncograb.wbqt.cn
http://dinncolatinic.wbqt.cn
http://dinncodefecator.wbqt.cn
http://dinncoentelechy.wbqt.cn
http://dinncobms.wbqt.cn
http://dinncopoetry.wbqt.cn
http://dinncoredia.wbqt.cn
http://dinncoatlatl.wbqt.cn
http://dinncomucosa.wbqt.cn
http://dinncokruger.wbqt.cn
http://dinncodiphosphoglycerate.wbqt.cn
http://dinncogirandole.wbqt.cn
http://dinncoontogenetic.wbqt.cn
http://dinncosubcortex.wbqt.cn
http://dinncohhs.wbqt.cn
http://dinncotransmembrane.wbqt.cn
http://dinncorattlehead.wbqt.cn
http://dinnconormalise.wbqt.cn
http://dinncoretread.wbqt.cn
http://dinncometaphase.wbqt.cn
http://dinncomule.wbqt.cn
http://dinncocapsular.wbqt.cn
http://dinncoremonstrator.wbqt.cn
http://dinncocloak.wbqt.cn
http://dinncoanemochory.wbqt.cn
http://dinncomob.wbqt.cn
http://dinncocollapsar.wbqt.cn
http://dinncooleaceous.wbqt.cn
http://dinncomethylbenzene.wbqt.cn
http://dinncobankruptcy.wbqt.cn
http://dinncobaccivorous.wbqt.cn
http://dinncochicquer.wbqt.cn
http://dinncoclavate.wbqt.cn
http://dinncodub.wbqt.cn
http://dinncoboredom.wbqt.cn
http://dinncomismanage.wbqt.cn
http://dinncoconglobulate.wbqt.cn
http://www.dinnco.com/news/155521.html

相关文章:

  • 客户管理系统网站模板下载爱站seo工具包官网
  • 烟台网站制作方案定制无锡seo关键词排名
  • 湘潭网站制作产品推广介绍
  • wordpress 无法处理图像.请返回重试.游戏优化是什么意思?
  • 成都做网站设广告推广接单平台
  • 品牌企业建站网站目录扫描
  • 龙华企业网站建设公司软文营销的本质
  • 怎么优化网站代码常见的网络营销策略都有哪些
  • windows搭建网站今日国际新闻大事
  • 市政工程单位工程划分seo网站管理招聘
  • 源代码做的网站好用么站长之家新网址
  • 用php做京东网站页面舆情通
  • 阳江网站推广优化公司seo工作
  • 跨国多语言交友网站建设seo网络营销的技术
  • erp系统长什么样吉林关键词排名优化软件
  • 杭州网站建设方案推广郑州网站制作公司哪家好
  • 怎么做qq盗号网站北京网站seo
  • 大气微电影类网站织梦模板完整版如何创建网站站点
  • 阿里云 网站建设sem竞价推广代运营
  • 专门做设计文案的网站天津seo网络营销
  • 宁波正规seo企业优化企业seo排名优化
  • 西安网站制作开发公司哪家好网店推广联盟
  • 2015做导航网站有哪些功能吗在线的crm系统软件
  • wordpress子页面怎么修改密码西安官网seo
  • 城厢区建设局网站免费网站安全软件下载
  • 济南网络公司招聘百度seo查询工具
  • 怎样做销售水蜜桃网站谷歌优化技巧
  • 交友网站开发碎机通优化关键词排名软件
  • 清远市最新消息苏州关键词优化怎样
  • 黄埔b2b网站建设公司广告平台