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

欧美网站模板下载温州网站推广哪家好

欧美网站模板下载,温州网站推广哪家好,2017最佳网站设计,中国建设官网首页在多线程编程中,其实就是分工、协作、互斥。在很多场景中,比如A执行的过程中需要同步等待另外一个线程处理的结果,这种方式下,就是一种等待唤醒的机制。本篇我们来讲述等待唤醒机制的三种实现,以及对应的应用场景。 G…

在多线程编程中,其实就是分工、协作、互斥。在很多场景中,比如A执行的过程中需要同步等待另外一个线程处理的结果,这种方式下,就是一种等待唤醒的机制。本篇我们来讲述等待唤醒机制的三种实现,以及对应的应用场景。

Guarded Suspension 模式

Guarded Suspension 翻译过来就是保护性暂停。其实就是一个线程需要等待获取另外一个线程执行的结果,先把当前线程挂起,另外一个线程执行完毕之后,通知自己,结束阻塞状态,继续执行。
等待唤醒的规范实现如下:

  • sychronized+wait/notify/notifyAll
  • reentrantLock+Condition(await/singal/singalAll)
  • cas+park/unpark

其实底层以来的是pthread,pthread_mutex_lock/unlock pthread_cond_wait/singal。这里就不介绍了,感兴趣的朋友可以自行查阅。

解决线程之间的协作不可避免会用到阻塞唤醒机制

实际编码

syn

package com.jia.suspension;import java.util.Objects;
import java.util.concurrent.TimeUnit;/*** @author qxlx* @date 2023/12/30 3:13 PM*/
public class SynTest {private Object obj;public Object read() {synchronized (this) {while (Objects.isNull(obj)) {try {System.out.println(Thread.currentThread().getName()+  " wait-before");this.wait();System.out.println(Thread.currentThread().getName()+  " wait-after");} catch (InterruptedException e) {e.printStackTrace();}}return obj;}}public void write() {System.out.println(Thread.currentThread().getName()+ "  write");synchronized (this) {obj = new Object();System.out.println(Thread.currentThread().getName()+ "  notifyAll-before");this.notifyAll();System.out.println(Thread.currentThread().getName()+ "   notifyAll-after");}}public static void main(String[] args) throws InterruptedException {SynTest synTest = new SynTest();new Thread(()-> {synTest.read();}).start();new Thread(()-> {synTest.write();}).start();TimeUnit.SECONDS.sleep(2);}}

切记 不能在main线程中启动,需要单独创建两个线程去执行,否则main线程阻塞的话,程序就会阻塞不会执行下去。

conditon

package com.jia.suspension;import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;/*** @author qxlx* @date 2023/12/30 3:31 PM*/
public class ConditionTest {private final Lock lock = new ReentrantLock();private final Condition condition = lock.newCondition();private Object obj;public Object read () {try {lock.lock();while (obj == null) {System.out.println("getLock");condition.await();}} catch (Exception e) {e.printStackTrace();} finally {lock.unlock();}return obj;}public void write() {try {lock.lock();obj = new Object();condition.signalAll();System.out.println("唤醒");} catch (Exception e) {e.printStackTrace();} finally {lock.unlock();}}public static void main(String[] args) throws InterruptedException {ConditionTest test = new ConditionTest();new Thread(()-> {test.read();}).start();new Thread(()-> {test.write();}).start();TimeUnit.SECONDS.sleep(1);}}

LockSouport

package com.jia.suspension;import java.util.concurrent.locks.LockSupport;/*** @author qxlx* @date 2023/12/30 3:38 PM*/
public class LockSupportTest {private Object obj;public Object read() {while (obj == null) {System.out.println("read-线程等待");LockSupport.park();System.out.println("read-线程唤醒");}return obj;}public void write(Thread thread) {obj = new Object();LockSupport.unpark(thread);System.out.println("唤醒线程");}public static void main(String[] args) {LockSupportTest lockSupportTest = new LockSupportTest();Thread thread = new Thread(() -> {lockSupportTest.read();});thread.start();Thread thread2 = new Thread(() -> {lockSupportTest.write(thread);});thread2.start();}}

好了以上就是三种唤醒阻塞的方式。

应用场景

  • 多线程环境下多个线程访问相同实例资源,从实例资源中获得资源并处理;
  • 实例资源需要管理自身拥有的资源,并对请求线程的请求作出允许与否的判断

在这里插入图片描述
在实际的开发中,我们对外提供一个API数据查询的接口,但是需要以来下游系统进行组合数据,将结果写入MQ,下游服务处理完毕后,然后另外一个线程进行获取数据处理。

在这里插入图片描述
从图中可以看从处理web请求的是蓝色的线程,而从Topic获取数据的线程是红色线程,也就是蓝色线程异步写入Topic数据后,会阻塞,等待红色线程获取结果后,然后在返回结果。

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

相关文章:

  • 小说网站模板wordpress的atl属性怎么设置
  • 网站界面设计说明淄博网站制作多样定制
  • 光谷做网站推广哪家好国土分局网站建设方案
  • 网站建设 考试题目360浏览器打开是2345网址导航
  • 佛山狮山网站建设wordpress 重新生成
  • 如何获取网站js图片网络推广的几种主要方法
  • 杭州网站提升排名seo引流软件
  • 网站推广运营实战培训个体工商户年报登录入口
  • 快手自媒体平台注册搜外seo视频 网络营销免费视频课程
  • 移动网站开发教学大纲网站添加外链
  • 一套网站源码多少钱域名跟网站的区别吗
  • 厦门购买域名以后搭建网站做网站让用seo刷新是哪个键
  • 公司设计网站推荐seo课程培训班
  • 企业网站建设选题依据免费推广网站在线观看
  • 最早做弹幕的网站做我女朋友程序网站
  • 东莞企业网站找谁wordpress wp admin
  • 北京网站建设公司报价浩森宇特静态网站更新
  • 电子商务网站建设基础考试北京壹零零壹网站建设
  • 做酒招代理的网站IT周末做网站违反制度么
  • 雄安专业网站建设公司2017网站建设公司排名
  • 114啦建站程序网站首页制作方案
  • 上海网站建设 微信开发公司哪家好app智能开发
  • 网站源码如何保存如何建立一个免费网站
  • 网站开发提供的服务建微信网站
  • 东莞高端模板建站从零开始做网站内容运营
  • 东莞百度网站排名优化北京网站设计与制作
  • 能进封禁网站的手机浏览器大学生网站开发大赛
  • 网站建设方案策划书前言网站建设设计基础
  • 胖哥食品网站建设规范意见天猫网站建设的目的
  • 建筑资料免费下载网站秦皇岛庆云网站建设