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

做网站能用自己电脑吗网站开发

做网站能用自己电脑吗,网站开发,重庆百度竞价托管,惠州个人做网站联系人wait和join的区别 wait和join在使用上都是等待。 但是join是等待其他线程结束,而wait是等待其他线程的notify通知再运行。 当拿到锁的线程,发现要执行的任务时机不成熟的时候,使用wait进行阻塞等待,然后等时机成熟了再notify通…

wait和join的区别

wait和join在使用上都是等待。

但是join是等待其他线程结束,而wait是等待其他线程的notify通知再运行。

当拿到锁的线程,发现要执行的任务时机不成熟的时候,使用wait进行阻塞等待,然后等时机成熟了再notify通知他可以接着走了。

这样的使用可以大大约束线程的运行顺序,此外他还有以下优点:

优势说明
节省 CPU替代忙等待,线程挂起时不消耗资源。
精准唤醒通过 notify 按条件触发,避免无效轮询。
线程安全自动释放/重新获取锁,避免死锁和竞态条件。
轻量级无需额外库,内置 synchronized 即可实现。

使用方法与注意事项

wait和notify是Object的方法,任意一个类都可以使用。

Object.wait();

调用 wait() 前必须获得对象的监视器锁(即 synchronized),这里需要保证对象是同一个。

synchronized(locker) {locker.wait();
}

在执行wait操作的时候是必须要加上锁的,代码进入 wait,就会先释放锁,并且阻塞等待如果其他线程做完了必要的工作,调用 notify 唤醒这个 wait 线程wait 就会解除阻塞, 重新获取到锁. 继续执行并返回

synchronized(locker) {//加锁状态locker.wait();//临时解锁//再加锁
}

在执行notify的时候虽然不涉及加锁操作,但是java强制要求搭配synchronized来使用

  Thread t2 = new Thread(()->{synchronized (locker1) {locker1.notify();}});

而在执行notify的时候也要保证这两个是同一个对象,这个共同的对象就是他俩沟通的桥梁,如果是两个不同的对象,则没有任何作用。

 Thread t1 = new Thread(()->{synchronized (locker1) {locker1.wait();}});Thread t2 = new Thread(()->{synchronized (locker2) {locker2.notify();//对于loker1的wait不会起到任何作用}});

如果有多个线程处于这个锁的wait等待状态,notify会随机唤醒一个线程,notify一次只会唤醒一个线程,nootifyAll方法可以唤醒所有线程。

  Thread t1 = new Thread(()->{synchronized (locker1) {locker1.notifyAll();//唤醒所有loker1的线程}});

wait方法不传入参数时处于“死等”模式,如果传入时间,过了这个时间就不再等待,和join方法类似。

 Thread t1 = new Thread(()->{synchronized (locker1) {locker1.wait(1000);//等待1s}});

务必要确保, 先 wait,后 notify,才有作用如果是先 notify, 后 wait, 此时 wait 无法被唤醒.notify 的这个线程,也没有副作用(notify 一个没有在 wait 的对象,不会报错)

小练习~

题目:使用两个线程交替打印 1~100 的数字,要求严格按顺序输出(线程A打印1,线程B打印2,线程A打印3…)。

🎯 核心要求
线程A负责打印奇数,线程B负责打印偶数。

必须使用 wait() 和 notify() 实现线程间协作,不能用 sleep() 或忙等待。

输出结果必须严格按顺序:1, 2, 3, 4,…, 100。

预期输出:

Thread-A: 1  
Thread-B: 2  
Thread-A: 3  
Thread-B: 4  
...  
Thread-A: 99  
Thread-B: 100

答案:

public class AlternatePrint {private static final Object lock = new Object();private static int num = 1;private static final int MAX = 100;public static void main(String[] args) {Thread t1 = new Thread(() -> {synchronized (lock) {while (num <= MAX) {if (num % 2 == 1) {System.out.println("Thread-A: " + num++);lock.notify();} else {try { lock.wait(); }catch (InterruptedException e) { e.printStackTrace(); }}}}});Thread t2 = new Thread(() -> {synchronized (lock) {while (num <= MAX) {if (num % 2 == 0) {System.out.println("Thread-B: " + num++);lock.notify();} else {try { lock.wait(); }catch (InterruptedException e) { e.printStackTrace(); }}}}});t1.start();t2.start();}
}
http://www.dtcms.com/wzjs/347463.html

相关文章:

  • 汕头建网站网络营销的招聘信息
  • 如何看网站是用什么程序做的英语培训机构前十名
  • 网站建设痛点杭州百家号优化
  • 自己的网站怎么做下载链接百度霸屏推广
  • 玛沁县wap网站建设公司郑州seo公司
  • go语言有啥好的网站开发框架网站推广计划书范文
  • 教育加盟培训网站建设北京最新发布信息
  • 多用户分销系统一般有哪些建站seo是什么
  • wordpress sns合肥建站公司seo
  • 有哪些网站做的很有特色太原做网站推广的公司
  • python网页版编辑器seo排名怎么优化软件
  • 扬中营销网站建设百度小说官网
  • wordpress current_user_can()seo综合查询站长工具关键词
  • 微信做网站代购sem竞价推广托管代运营公司
  • 政府网站开发项目seo刷排名公司
  • 康桥网站建设淘宝推广方式
  • 网上投资项目的平台有哪些百度推广优化方案
  • 局域网内的网站建设今日头条新闻最新事件
  • 装修公司网站怎么建设怎么在网上做推广
  • 建设工程网站168今日新闻快报
  • 网站图怎么做会高清图片营销和销售的区别
  • 企业网站策划谷歌chrome
  • 服装公司 网站怎么做营销说白了就是干什么的
  • 平面设计师证怎么考青岛seo整站优化公司
  • 小程序商城怎么推广广东搜索引擎优化
  • wordpress 大数据插件seo外链代发
  • 用asp.net做的 购物网站视频百度账户托管运营
  • 南昌网站建设设计网络营销主要做些什么
  • 网站robots怎么做新冠病毒最新消息
  • 石家庄做公司网站接单平台