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

北京住房和城乡建设部官方网站湛江制作网站企业

北京住房和城乡建设部官方网站,湛江制作网站企业,wordpress国内工作室主题,百度中心wait是指在一个已经进入了同步锁的线程内#xff0c;让自己暂时让出同步锁#xff0c;以便其他正在等待此锁的线程可以得到同步锁并运行#xff0c;只有其他线程调用了notify方法(notify并不释放锁#xff0c;只是告诉调用过wait方法的线程可以去参与获得锁的竞争了#x…wait是指在一个已经进入了同步锁的线程内让自己暂时让出同步锁以便其他正在等待此锁的线程可以得到同步锁并运行只有其他线程调用了notify方法(notify并不释放锁只是告诉调用过wait方法的线程可以去参与获得锁的竞争了但不是马上得到锁因为锁还在别人手里别人还没释放)调用wait方法的一个或多个线程就会解除wait状态重新参与竞争对象锁程序如果可以再次得到锁就可以继续向下运行。1)wait()、notify()和notifyAll()方法是本地方法并且为final方法无法被重写。2)当前线程必须拥有此对象的monitor(即锁)才能调用某个对象的wait()方法能让当前线程阻塞(这种阻塞是通过提前释放synchronized锁重新去请求锁导致的阻塞这种请求必须有其他线程通过notify()或者notifyAll()唤醒重新竞争获得锁)3)调用某个对象的notify()方法能够唤醒一个正在等待这个对象的monitor的线程如果有多个线程都在等待这个对象的monitor则只能唤醒其中一个线程(notify()或者notifyAll()方法并不是真正释放锁必须等到synchronized方法或者语法块执行完才真正释放锁)4)调用notifyAll()方法能够唤醒所有正在等待这个对象的monitor的线程唤醒的线程获得锁的概率是随机的取决于cpu调度例子1(错误使用导致线程阻塞)三个线程线程3先拥有sum对象的锁然后通过sum.notify()方法通知等待sum锁的线程去获得锁但是这个时候线程1,2并没有处于wait()导致的阻塞状态而是在synchronized方法块处阻塞了所以这次notify()根本没有通知到线程1,2。然后线程3正常结束释放掉sum锁这个时候线程1就立刻获得了sum对象的锁(通过synchronized获得)然后调用sum.wait()方法释放掉sum的锁线程2随后获得了sum对象的线程锁(通过synchronized获得)这个时候线程1,2都处于阻塞状态但是悲催的是这之后再也没有线程主动调用sum.notify()或者notifyAll()方法显示唤醒这两个线程所以程序阻塞public class CyclicBarrierTest {public static void main(String[] args) throws Exception {final Sum sumnew Sum();new Thread(new Runnable() {Overridepublic void run() {try {synchronized (sum) {System.out.println(thread3 get lock);sum.sum();sum.notifyAll(); //此时唤醒没有作用没有线程等待Thread.sleep(2000);System.out.println(thread3 really release lock);}} catch (Exception e) {e.printStackTrace();}}}).start();new Thread(new Runnable() {Overridepublic void run() {try {synchronized (sum) {System.out.println(thread1 get lock);sum.wait();//主动释放掉sum对象锁System.out.println(sum.total);System.out.println(thread1 release lock);}} catch (Exception e) {e.printStackTrace();}}}).start();new Thread(new Runnable() {Overridepublic void run() {try {synchronized (sum) {System.out.println(thread2 get lock);sum.wait(); //释放sum的对象锁等待其他对象唤醒(其他对象释放sum锁)System.out.println(sum.total);System.out.println(thread2 release lock);}} catch (Exception e) {e.printStackTrace();}}}).start();}}class Sum{public Integer total0;public void sum() throws Exception{total100;Thread.sleep(5000);}}thread3 get lockthread3 really release lockthread2 get lockthread1 get lock//程序后面一直阻塞例子2还是上面程序顺序不同把线程3放到最下面。最后线程1,2都因为没有再次获得线程导致线程阻塞运行过程线程1先运行获得sum对象锁(通过synchronized)但是随后执行了sum.wait()方法主动释放掉了sum对象锁然后线程2获得了sum对象锁(通过synchronized),也通过sum.wait()失去sum的对象锁最后线程3获得了sum对象锁(通过synchronized)主动通过sum.notify()通知了线程1或者2假设是1线程1重新通过notify()/notifyAll()的方式获得了锁然后执行完毕随后线程释放锁然后这个时候线程2成功获得锁执行完毕。public class CyclicBarrierTest {public static void main(String[] args) throws Exception {final Sum sumnew Sum();new Thread(new Runnable() {Overridepublic void run() {try {synchronized (sum) {System.out.println(thread1 get lock);sum.wait();//主动释放sum对象锁等待唤醒System.out.println(sum.total);System.out.println(thread1 release lock);}} catch (Exception e) {e.printStackTrace();}}}).start();new Thread(new Runnable() {Overridepublic void run() {try {synchronized (sum) {System.out.println(thread2 get lock);sum.wait(); //主动释放sum对象锁等待唤醒System.out.println(sum.total);System.out.println(thread2 release lock);}} catch (Exception e) {e.printStackTrace();}}}).start();new Thread(new Runnable() {Overridepublic void run() {try {synchronized (sum) {System.out.println(thread3 get lock);sum.sum();sum.notifyAll();//唤醒其他等待线程(线程1,2)Thread.sleep(2000);System.out.println(thread3 really release lock);}} catch (Exception e) {e.printStackTrace();}}}).start();}}class Sum{public Integer total0;public void sum() throws Exception{total100;Thread.sleep(5000);}}thread1 get lockthread2 get lockthread3 get lockthread3 really release lock100thread2 release lock100thread1 release lock
http://www.pierceye.com/news/877042/

相关文章:

  • 如何建单位网站怎么让别人找你做网站
  • 青海建设厅职称网站建设小程序怎么挂失
  • 建设在线购物网站51zwd一起做网站广州
  • 如何制作网站图片帮忙做网站
  • 高端做网站公司网络信息安全公司
  • 手机网站图片自适应建设网站用的软件
  • wordpress postid随机苏州百度推广排名优化
  • 重庆企业网站推广服务做性的网站
  • asp.net 创建网站登陆建设银行网站异常
  • 柳州网站建设柳州wordpress 创建文集
  • 怎样把网站做成app多语言网站建设方案
  • 中国最新新闻头条南通百度网站快速优化
  • 乐清网站推广制作长沙银狐做网站
  • 做企业网站需要多久论坛网站推广方案
  • 郑州网站优化排名wordpress搭建本地博客
  • 如何获取网站域名证书刚刚北京传来重大消息
  • 找别人做淘客网站他能改pid吗现在中型公司做网站用的是什么框架
  • 泉州晋江网站建设费用海南建设银行官网招聘网站
  • 自己给公司做网站郑州工程建设信息网站
  • 单页网站建站外贸公司网站怎么设计更好
  • 滨州建设工程备案网站网站制作九江
  • 北京网站制作业务如何开展全屋整装定制
  • 网站seo博客刷百度关键词排名
  • 制作企业网站的代码馆陶专业做网站
  • 网站建设简介联系方式PHP 网站开发 重点知识
  • 网页设计网站排行榜浅谈一下网络营销的几个误区
  • 上海网站制作公司报价中国十大咨询公司
  • 软件开发和网站建设哪个好dede网站本地访问速度慢
  • 平安建设网站做写手哪个网站好
  • 服务器硬件影响网站速度网站链接优化