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

pycharm网站开发实例紫色个人网站模板

pycharm网站开发实例,紫色个人网站模板,陇南网站网站建设,seo建站外贸线程的同步和死锁 同步问题引出 当多个线程访问同一资源时,会出现不同步问题。比如当票贩子A(线程A)已经通过了“判断”,但由于网络延迟,暂未修改票数的间隔时间内,票贩子B(线程B)…

线程的同步和死锁

同步问题引出

当多个线程访问同一资源时,会出现不同步问题。比如当票贩子A(线程A)已经通过了“判断”,但由于网络延迟,暂未修改票数的间隔时间内,票贩子B(线程B)也通过了“判断”。此时,若票数只剩下了最后一张,则会出现两个线程同时通过判断并最终会修改票数,出现错误(票数为0或-1)。
在这里插入图片描述

线程同步处理

解决同步问题的关键是锁,指的是当某一个线程执行操作的时候,其它线程外面等待。
在这里插入图片描述

现这把锁的功能,就可以使用 synchronized 关键字来实现,利用此关键字可以定义同步方法或同步代码块, 在同步代码块的操作里面的代码只允许一个线程执行。

1. 同步代码块

synchronized(同步对象){同步代码操作;
}

一般要进行同步对象处理的时候可以采用当前对象 this 进行同步。
卖票范例(同步代码块版):

class MyThread implements Runnable { // 线程的主体类private int ticket = 5;@Overridepublic void run() { // 线程的主体方法while(true) {synchronized(this) { // 每一次只允许一个线程进行访问if (this.ticket > 0) {try {Thread.sleep(100);  // 模拟网络延迟} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + "买票,ticket = " + this.ticket --);				} else { System.out.println("-----票已售完-----");break;}}}}
}
public class ThreadDemo {public static void main(String[] args) {MyThread mt = new MyThread();new Thread(mt,"票贩子A").start(); new Thread(mt,"票贩子B").start(); new Thread(mt,"票贩子C").start(); }
}

结果:

票贩子A买票,ticket = 5
票贩子C买票,ticket = 4
票贩子C买票,ticket = 3
票贩子C买票,ticket = 2
票贩子B买票,ticket = 1
-----票已售完-----
-----票已售完-----
-----票已售完-----

加入同步处理之后,程序的整体的性能下降了。同步实际上会造成性能的降低。

2. 同步方法

只需要在方法定义上使用synchronized 关键字即可。

class MyThread implements Runnable { // 线程的主体类private int ticket = 5;public synchronized boolean sale() { // 每一次只允许一个线程进行访问该方法if (this.ticket > 0) {try {Thread.sleep(100);  // 模拟网络延迟} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + "买票,ticket = " + this.ticket --);return true;} else { System.out.println("-----票已售完-----");return false;}}@Overridepublic void run() {while(this.sale()) {}}
}
public class ThreadDemo {public static void main(String[] args) {MyThread mt = new MyThread();new Thread(mt,"票贩子A").start(); new Thread(mt,"票贩子B").start(); new Thread(mt,"票贩子C").start(); }
}

结果:

票贩子A买票,ticket = 5
票贩子A买票,ticket = 4
票贩子A买票,ticket = 3
票贩子C买票,ticket = 2
票贩子C买票,ticket = 1
-----票已售完-----
-----票已售完-----
-----票已售完-----

在日后学习 Java 类库的时候会发现,系统中许多的类上使用的同步处理采用的都是同步方法。

线程死锁

死锁是在进行多线程同步的处理之中有可能产生的一种问题,所谓的死锁指的是若干个线程彼此互相等待的状态。
若干个线程访问同一资源时一定要进行同步处理,而过多的同步会造成死锁。

http://www.yayakq.cn/news/687327/

相关文章:

  • 网站的整体风格包括做网站的那些个人工作室
  • 网站新闻页设计培训机构有哪些
  • 宜兴做网站的公司网站+建设设计
  • 营销型企业网站的建设步骤WordPress注册插件中文
  • 烟台网站建设学校成都互联网公司数量排名
  • 网站做seo外链平台网站模板 优帮云
  • 背投广告典型网站自贡建设监督质量网站
  • 卖水果网站模板wordpress主题制作全过程新手必看
  • 如何做网站微信小程序在哪一个网站做社保申报
  • 公司网站公司高质量的邯郸网站建设
  • 购物网站底部设计徐州铜山区三盛开发公司
  • 盐城做企业网站哪家好网站设计与建设word设计理念
  • 怎么做一购物网站网站设计 侵权
  • 宝安印刷网站建设千图网素材免费
  • 网站收录引擎企业墙面设计
  • ssh框架做音乐网站记事本做网站如何排版
  • 商城网站建设包括哪些python新手代码
  • 建设银行mylove网站济南高端网站设计
  • 电子商务网站建设内容wordpress kvstore
  • 无锡画室网站建设wordpress计数插件
  • 公总号开发就是网站开发吗滨州wordpress建站
  • 广州做网站公司哪家好做网站排名需要多少钱
  • 怎么建自己的摄影网站男女怎样做那个视频网站
  • 长春自助建站模板网站被k了怎么办
  • 泸州公司做网站重庆响应式网站多少钱
  • 邢台网站建设基本流程广东平台网站建设平台
  • 网站制作中的展开怎么做商丘网络推广外包
  • 科技软件公司网站模板下载网站做子页跳转到首页
  • 泉山区城乡建设局网站WordPress文章上传图片
  • 做网站分页网站合同书