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

自己做网站 需要哪些东西湖南平台网站建设方案

自己做网站 需要哪些东西,湖南平台网站建设方案,设计师常上的网站,山东德州网站建设文章目录 为什么 java wait/notify 必须与 synchronized 一起使用synchronized是什么synchronized如何实现锁wait/notify不用synchronized 会怎么样[最终形态] 把lock和obj合一lost wake up 为什么 java wait/notify 必须与 synchronized 一起使用 这个问题就是书本上没怎么讲… 文章目录 为什么 java wait/notify 必须与 synchronized 一起使用synchronized是什么synchronized如何实现锁wait/notify不用synchronized 会怎么样[最终形态] 把lock和obj合一lost wake up 为什么 java wait/notify 必须与 synchronized 一起使用 这个问题就是书本上没怎么讲解就是告诉我们这样处理但没有解释为什么这么处理我也是基于这样的困惑去了解原因。 synchronized是什么 Java中提供了两种实现同步的基础语义synchronized方法和synchronized块 看个demo public class SyncTest {\\ 1、synchronized方法public synchronized void syncMethod(){System.out.println(hello method);}\\ 2、synchronized块public void syncBlock(){synchronized (this){System.out.println(hello block);}} }具体还要区分 修饰实例方法作用于当前实例加锁进入同步代码前要获得当前实例的锁。不同实例对象的访问是不会形成锁的。 修饰静态方法作用于当前类对象加锁进入同步代码前要获得当前类对象的锁 修饰代码块指定加锁对象对给定对象加锁进入同步代码库前要获得给定对象的锁。 它具有的特性 原子性 可见性 有序性 可重入性 synchronized如何实现锁 这样看来synchronized实现的锁是基于class对象来实现的我们来看看如何实现的它其实是跟class对象的对象头一起起作用的对象在内存中的布局分为三块区域对象头、实例数据和对齐填充。 其中对象头中有一个Mark Word这里主要存储对象的hashCode、锁信息或分代年龄或GC标志等信息把可能的情况列出来大概如下 其中synchronized就与锁标志位一起作用实现锁。主要分析一下重量级锁也就是通常说synchronized的对象锁锁标识位为10其中指针指向的是monitor对象也称为管程或监视器锁的起始地址。 每个对象都存在着一个 monitor 与之关联对象与其 monitor 之间的关系有存在多种实现方式如monitor可以与对象一起创建销毁或当线程试图获取对象锁时自动生成但当一个 monitor 被某个线程持有后它便处于锁定状态。 在Java虚拟机(HotSpot)中monitor是由ObjectMonitor实现的其主要数据结构如下位于HotSpot虚拟机源码ObjectMonitor.hpp文件C实现的 ObjectMonitor() {_header NULL;_count 0; //记录个数_waiters 0,_recursions 0;_object NULL;_owner NULL;_WaitSet NULL; //处于wait状态的线程会被加入到_WaitSet_WaitSetLock 0 ;_Responsible NULL ;_succ NULL ;_cxq NULL ;FreeNext NULL ;_EntryList NULL ; //处于等待锁block状态的线程会被加入到该列表_SpinFreq 0 ;_SpinClock 0 ;OwnerIsThread 0 ;}上面有2个字段很重要 _WaitSet队列处于wait状态的线程会被加入到_WaitSet。_EntryList队列处于等待锁block状态的线程会被加入到该列表。_owner_owner指向持有ObjectMonitor对象的线程 我们来模拟一下进入锁的流程 1、当多个线程同时访问一段同步代码时首先会进入 _EntryList 集合 2、当线程获取到对象的monitor 后进入 _Owner 区域并把monitor中的owner变量设置为当前线程同时monitor中的计数器count加1 3、若线程调用 wait() 方法将释放当前持有的monitorowner变量恢复为nullcount自减1同时该线程进入 WaitSet集合中等待被唤醒。 4、若当前线程执行完毕也将释放monitor(锁)并复位变量的值以便其他线程进入获取monitor(锁) wait/notify 这两个是Java对象都有的属性表示这个对象的一个等待和通知机制。 不用synchronized 会怎么样 参考其他博客我们来看看不使用synchronized会怎么样假设有2个线程分别做2件事情T1线程代码逻辑 while(!条件满足) // line 1 {obj.wait(); // line 2 } doSomething();T2线程的代码逻辑 更改条件为满足; // line 1 obj.notify(); // line 2多线程环境下没有synchronized没有锁的情况下可能会出现如下执行顺序情况 T1 line1 满足while 条件T2 line1 执行T2 line2 执行notify发出去了T1 line2 执行wait再执行 这样的执行顺序导致了notify通知发出去了但没有用已经wait是在之后执行所以有人说没有保证原子性就是line1 和line2 是一起执行结束这个也被称作lost wake up问题。 解决方法就是可以利用synchronized来加锁于是有人就写了这样的代码 synchronized(lock) {while(!条件满足){obj.wait();}doSomething(); } synchronized(lock) {更改条件为满足;obj.notify(); }这样靠锁来做达到目的。但这代码会造成死锁因为先T1 wait()再T2 notify()而问题在于T1持有lock后block住了T2一直无法获得lock从而永无可能notify()并将T1的block状态解除就与T1形成了死锁。 所以JVM在实现wait()方法时一定需要先隐式的释放lock再block并且被notify()后从wait()方法返回前隐式的重新获得了lock后才能继续user code的执行。要做到这点就需要提供lock引用给obj.wait()方法否则obj.wait()不知道该隐形释放哪个lock于是调整之后的结果如下 synchronized(lock) {while(!条件满足){obj.wait(lock);// obj.wait(lock)伪实现// [1] unlock(lock)// [2] block住自己等待notify()// [3] 已被notify()重新lock(lock)// [4] obj.wait(lock)方法成功返回}doSomething(); }[最终形态] 把lock和obj合一 其它线程API如PThread提供wait()函数的签名是类似cond_wait(obj, lock)的因为同一个lock可以管多个obj条件队列。 而Java内置的锁与条件队列的关系是1:1所以就直接把obj当成lock来用了。因此此处就不需要额外提供lock而直接使用obj即可代码也更简洁 synchronized(obj) {while(!条件满足){obj.wait();}doSomething(); } synchronized(lock) {更改条件为满足;obj.notify(); }lost wake up wait/notify 如果不跟synchronized结合就会造成lost wake up难以唤醒wait的线程所以单独使用会有问题。
http://www.zqtcl.cn/news/692415/

相关文章:

  • 上海网站制作方法北京网站制作设计推广公司
  • 衡水哪有建网站的吗个人简历word模板
  • 网站建设前期开发企业网站开发丨薇
  • 流程图 网站做网站后台数据库建设
  • 免费做英语卷子的网站wordpress去谷歌插件
  • 做网站费用网站极简设计
  • 兰州市建设工程安全质量监督站网站优化公司治理
  • 高质量的合肥网站建设天津百度网站快速优化
  • 千元低价网站建设wordpress修改文章时间
  • 做网站需要几个程序wordpress淘客api
  • 建筑公司网站源码本地建站教程
  • 甘肃省建设厅官方网站信息网腾讯企点qq
  • 搜狗收录网站建个网络平台多少钱
  • 电子商务网站开发目的和意义郑州网站优化的微博_腾讯微博
  • asp.net网站建设项目实战 董义革wordpress伪静态规则访问失败
  • 网站添加锚点网站备案名称更换
  • 手机商城网站如何企业网站建设及运营现状分析
  • 网站建设注意的问题网站模板 知乎
  • 自主设计和创建网站网站建设价格便宜
  • 高手做网站财经资讯网站该怎么做推广
  • 加强农业网站建设青岛全网营销推广
  • 做淘客网站怎么样济南软件公司排名
  • 企业网站优化兴田德润怎么样网站建设建设公司资质要求
  • 如何把网站做跳转浏览器链接地址wordpress 离线更新
  • 乌海学校网站建设wordpress默认主题下载
  • 海兴县做网站如何选网站建设公司
  • asp网站设为首页代码孝仙洪高速公路建设指挥部网站
  • 浦东新区网站开发人才网站建设策划书
  • 网站做flash好不好免费微信公众号素材网
  • 开发网站嵌入广告汕头电商网站建设