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

佛山营销网站建设费用查网站流量查询工具

佛山营销网站建设费用,查网站流量查询工具,网站用视频做背景,cms 做网站一、wait & notify wait能让线程进入waiting状态,这时候就需要比较一下和sleep的区别了。 sleep vs wait 1) sleep 是 Thread 方法,而 wait 是 Object 的方法 2) sleep 不需要强制和 synchronized 配合使用,但 wait 强制和 s…

一、wait & notify

wait能让线程进入waiting状态,这时候就需要比较一下和sleep的区别了。

sleep vs wait        

1) sleep 是 Thread 方法,而 wait 是 Object 的方法

2) sleep 不需要强制和 synchronized 配合使用,但 wait 强制和 synchronized 一起用

3) sleep 时不会释放对象锁,但 wait 在等待的时候会释放对象锁

4) 它们在java中的状态不同 sleep是 TIMED_WAITING, wait是 WAITING

正确套路写法:

wait和notify搭配使用,一个线程需要满足条件时工作,一个线程负责提供条件后唤醒。

    synchronized (lock){while (条件不成立){lock.wait();}//条件成立,开始工作}//另一个线程synchronized (lock){lock.notifyAll();}

二、案例——保护式暂停 Guarded Suspension

        有一个结果需要从一个线程传递到另一个线程,让他们关联同一个 GuardedObject

        GuradObject类,提供get和product方法,按照wait和notify的套路写法即可。

        然后主线程创建一个实例对象(锁对象),用两个线程模拟的过程。

@Slf4j(topic = "c.test")
public class Guard {public static void main(String[] args) {GuardObject guardObject = new GuardObject();new Thread(() -> {log.debug("等待结果");Object o = guardObject.get();log.debug("结果:{}", o);}, "t1").start();new Thread(()->{log.debug("输出结果");try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}guardObject.product(10);}, "t2").start();}
}class GuardObject{private Object response;public synchronized Object get(){while(response == null){try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}return response;}public synchronized void product(Object response){this.response = response;this.notifyAll();}
}

2s以后,输出结果

三、超时优化

        可以改进一下GuardObject的方法,不要让t1一直空等,如果等了超过一定时间,那么就不等了。

        我们给get传个参数,作为最大等待时间timeoutbegin作为最初时间duration记录经历时间waitTime还需要等待的时间

class GuardObject{private Object response;public synchronized Object get(long timeout){long begin = System.currentTimeMillis();long duration = 0;while(response == null){long waitTime = timeout-duration;if(duration > timeout){break;}try {this.wait(waitTime);} catch (InterruptedException e) {e.printStackTrace();}duration = System.currentTimeMillis() - begin;}return response;}public synchronized void product(Object response){this.response = response;this.notifyAll();}
}

2s可以返回结果,如果只等1s:

等3s:

四、join原理

        join的设计符合保护式暂停的设计模式。

    public final synchronized void join(long millis)throws InterruptedException {long base = System.currentTimeMillis();long now = 0;if (millis < 0) {throw new IllegalArgumentException("timeout value is negative");}if (millis == 0) {while (isAlive()) {wait(0);}} else {while (isAlive()) {long delay = millis - now;if (delay <= 0) {break;}wait(delay);now = System.currentTimeMillis() - base;}}}

可以看到案例中超时优化代码和这里逻辑相同。

如果millis==0,代表需要一直wait,直到isAlive为假,也就是线程结束。

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

相关文章:

  • 软件公司做网站推广科目朋友圈发布到wordpress
  • 镇江建设工程质量监督局网站wordpress怎么改图片
  • 爱站网站wordpress 关注插件
  • 大浪做网站竞价推广网络推广运营
  • 山东城市建设职业学院教务网网站wordpress 分类菜单
  • 做外包的网站有哪些网站首页引导页
  • 建筑专业网站建设手机网站建设视频教程_
  • 注册网站做推广做电影采集网站用什么vps
  • 网站制作 深圳做网站顶部图片长度是多少
  • 道滘网站仿做浙江做网站的公司有哪些
  • 淘宝优惠网站怎么做深圳设计网站费用
  • 网站怎么设置二级域名网站 建设ppt
  • 做流量哪个网站好义乌国际贸易综合信息服务平台
  • 温州网站建设活动wordpress自动跳转
  • 建设网站的注意事项查询建设工程施工规范网站
  • 土特产直营建设网站的调研成都网站建设熊掌号
  • php整站开发 企业网站教程智能网站设计哪家好
  • 玉溪做网站公司中国建筑集团有限公司怎么样
  • WordPress主题页面模板不见了seo营销型网站推广
  • 东莞h5网站制作做网站的骗术
  • 网站建设1自学网站开发软件开发
  • 专注苏州网站优化前程无忧做简历网站
  • 新乡手机网站建设官网怎样找做淘宝客的网站
  • 免费域名申请网站大全推荐北京网站设计工作室
  • 淘宝商城的网站建设公司注册网站怎么做
  • 基于多站点的网站内容管理平台的管理与应用2015年做那个网站能致富
  • 中国摄影网站中国机械加工网18易5下2拉i
  • 丹阳企业网站制作电商数据分析师
  • 云速成美站vi设计的简介
  • 江苏科技大学新校区建设网站做网站除了广告还有什么收入的