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

深圳 德 网站建设以太坊网站开发

深圳 德 网站建设,以太坊网站开发,wordpress泛域名解析,北京网站页面设计目录 1. wait()⽅法 2. notify()⽅法 3. notifyAll()⽅法 4. wait 和 sleep 的对⽐#xff08;⾯试题#xff09; 由于线程之间是抢占式执⾏的, 因此线程之间执⾏的先后顺序难以预知. 但是实际开发中有时候我们希望合理的协调多个线程之间的执⾏先后顺序. 完成这个协调⼯… 目录 1. wait()⽅法 2. notify()⽅法 3. notifyAll()⽅法 4. wait 和 sleep 的对⽐⾯试题 由于线程之间是抢占式执⾏的, 因此线程之间执⾏的先后顺序难以预知. 但是实际开发中有时候我们希望合理的协调多个线程之间的执⾏先后顺序. 完成这个协调⼯作, 主要涉及到三个⽅法 wait() / wait(long timeout):  让当前线程进⼊等待状态.notify() / notifyAll():  唤醒在当前对象上等待的线程. 注意: wait, notify, notifyAll 都是 Object 类的⽅法 1. wait()⽅法 wait 做的事情: • 使当前执⾏代码的线程进⾏等待. (把线程放到等待队列中) • 释放当前的锁 • 满⾜⼀定条件时被唤醒, 重新尝试获取这个锁. wait 要搭配 synchronized 来使⽤. 脱离 synchronized 使⽤ wait 会直接抛出异常. wait 结束等待的条件: • 其他线程调⽤该对象的 notify ⽅法. • wait 等待时间超时 (wait ⽅法提供⼀个带有 timeout 参数的版本, 来指定等待时间). • 其他线程调⽤该等待线程的 interrupted ⽅法, 导致 wait 抛出 InterruptedException 异常. public class Test {public static void main(String[] args) {Object locker new Object();Thread t new Thread(()-{synchronized (locker) {System.out.println(wait 等待之前);try {locker.wait();} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(wait 等待结束);}});t.start();} } 这样在执⾏到 object.wait() 之后就⼀直等待下去那么程序肯定不能⼀直这么等待下去了。这个时候就 需要使⽤到了另外⼀个⽅法唤醒的⽅法 notify()。 wait提供了两个版本: 2. notify()⽅法 notify ⽅法是唤醒等待的线程. ⽅法notify()也要在同步⽅法或同步块中调⽤该⽅法是⽤来通知那些可能等待该对象的对象锁的其 它线程对其发出通知notify并使它们重新获取该对象的对象锁。如果有多个线程等待则有线程调度器随机挑选出⼀个呈 wait 状态的线程。(并没有 先来后到) 在notify()⽅法后当前线程不会⻢上释放该对象锁要等到执⾏notify()⽅法的线程将程序执⾏ 完也就是退出同步代码块之后才会释放对象锁 notify 其实可以不放到 synchronize 里, 不需要先加锁, 但是 java 中特别约定要把 notify 放到 synchronized 里.  代码⽰例: 使⽤notify()⽅法唤醒线程 public class Test {public static void main(String[] args) throws InterruptedException {Object locker new Object();Thread t1 new Thread(()-{synchronized (locker) {System.out.println(t1 wait 之前);try {locker.wait();}catch (InterruptedException e) {e.printStackTrace();}System.out.println(t1 wait 之后);}});Thread t2 new Thread(()- {try {Thread.sleep(3000);//让 t1 线程有时间进入到wait状态synchronized (locker) {System.out.println(t2 notify 之前);locker.notify();System.out.println(t2 notify 之后);}}catch (InterruptedException e) {e.printStackTrace();}});t1.start();t2.start();} } wait 和 notify 彼此之间是通过 Object 对象联系起来的, 必须是两个对象一致时才能够被唤醒. 3. notifyAll()⽅法 notify⽅法只是唤醒某⼀个等待线程. 使⽤notifyAll⽅法可以⼀次唤醒所有的等待线程. 理解 notify 和 notifyAll notify 只唤醒等待队列中的⼀个线程. 其他线程还是乖乖等着 notifyAll ⼀下全都唤醒, 需要这些线程重新竞争锁 4. wait 和 sleep 的对⽐⾯试题 1. wait 需要搭配 synchronized 使⽤. sleep 不需要. 2. wait 是 Object 的⽅法 sleep 是 Thread 的静态⽅法. 在Java中wait()和sleep()都是用于线程控制的方法但是它们有一些重要的区别。 wait()是Object类中定义的方法而sleep()是Thread类中定义的方法。wait()是在对象级别上进行操作而sleep()是在当前线程级别上进行操作。 wait()方法会释放线程持有的锁使线程进入等待状态直到其他线程调用相同对象上的notify()或notifyAll()方法来唤醒等待的线程。sleep()方法不会释放线程持有的锁。 wait()方法必须在同步上下文中被调用即在同步方法或同步块中否则会抛出IllegalMonitorStateException异常。而sleep()方法可以在任何地方调用。 wait()方法还可以指定一个超时时间在等待超时后会自动唤醒线程。而sleep()方法只能通过interrupt()方法或等待指定时间来唤醒线程。 总的来说wait()方法用于线程间的协调和通信而sleep()方法主要用于线程的休眠。wait()方法在等待期间会释放锁而sleep()方法不会释放锁。
http://www.pierceye.com/news/879886/

相关文章:

  • 四川省工程建设信息官方网站个人域名注册免费
  • 网站建设用源码徐州金网网站建设
  • 老哥们给个关键词威海网站seo
  • 贵州网站备案延庆网站建设师
  • 做网站怎么上词网站建设战略伙伴
  • 绵阳网站推广排名给网站网站做代理
  • 网站轮播代码北京的公司有哪些
  • 网上书城网站开发外文参考文献wordpress禁用谷歌字体插件
  • 团购模板网站全网营销型网站建设模板
  • ac域名网站邯郸中国建设银行网站
  • 广州seo网站开发微信营销的优势
  • 宝塔可以做二级域名网站么有哪些好的做兼职网站
  • 网站建设公司落寞特殊符号网名生成器
  • 设计分享网站在闲鱼可以做网站吗
  • 安全等级保护每个网站必须做吗实惠的网站建设公司
  • vue可以做pc端网站山东专业企业网站建设
  • 推广网站软文高中网站制作
  • 做h的动漫在线观看网站安阳市有几个区几个县
  • 帝国cms地方门户网站模板怀集县住房和城乡规划建设网站
  • 河北住房建设厅网站首页怎么自己建设网站
  • 政务网站建设及安全下载app赚钱的平台
  • 如何制作一个论坛网站都江堰建设局网站
  • 网站建设seo优化浙江广17网站一起做网店
  • WordPress子站站群优化教程网站推广排名
  • 毕设做购物网站容易吗网上商城是什么意思
  • 1688阿里巴巴官方网站杭州网站建设seo
  • 建设网站选什么地方的主机网站上漂亮的甘特图是怎么做的
  • 用什么软件来建网站立创电子元器件商城官网
  • 做视频网站成本如何定制微信小程序
  • 南宁市有哪些做网站的外包企业青州网站建设公司