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

vue 做网站 seo简易购物网站模板

vue 做网站 seo,简易购物网站模板,露兜博客 wordpress,做网站的没有进项票怎么办说明: 开发中经常会碰到线程并发,但是后续线程需要等待第一个线程执行完返回结果后,才能再执行后面线程。 如何处理呢,今天就介绍两种方法 1、使用Java自有的API即CountDownLatch,进行实现 思考:CountDown…

说明: 开发中经常会碰到线程并发,但是后续线程需要等待第一个线程执行完返回结果后,才能再执行后面线程。
如何处理呢,今天就介绍两种方法

1、使用Java自有的API即CountDownLatch,进行实现

思考:CountDownLatch通过一个计数器来实现线程等待,计数器初始化为需要等待的事件数量。在这里,线程a完成后,b和c才能继续,所以计数器应该是1。当a完成数据准备后,调用countDown(),计数器减到0,这时候等待的b和c就可以继续执行了。

public class CountDownLatchDemo {// 定义共享数据(确保可见性,使用 volatile)private static volatile String data;// 初始化 CountDownLatch,计数器为 1(只需要等待线程 a 完成一次操作)private static final CountDownLatch latch = new CountDownLatch(1);public static void main(String[] args) {// 启动线程 a、b、cnew Thread(new Runnable() {public void run() {threadC();}}).start();new Thread(new Runnable() {public void run() {threadB();}}).start();new Thread(new Runnable() {public void run() {threadA();}}).start();}// 线程 a:准备数据private static void threadA() {try {// 模拟耗时操作(如计算、IO)Thread.sleep(1000);data = "来自线程 A 的数据";System.out.println("线程 A 数据准备完毕");} catch (InterruptedException e) {e.printStackTrace();} finally {// 数据就绪后,释放计数器latch.countDown();}}// 线程 b:等待数据后处理private static void threadB() {try {// 阻塞等待数据就绪latch.await();System.out.println("线程 B 收到数据: " + data);} catch (InterruptedException e) {e.printStackTrace();}}// 线程 c:等待数据后处理private static void threadC() {try {// 阻塞等待数据就绪latch.await();System.out.println("线程 C 收到数据: " + data);} catch (InterruptedException e) {e.printStackTrace();}}
}

运行结果:
在这里插入图片描述

2、使用kotlin协程的方式

思考:

协程 a 的异步执行:

1)使用 async 启动协程 a,返回一个 Deferred 对象(dataDeferred)。

2)在协程 a 中,通过 delay(1000) 模拟耗时操作,最终返回数据。

协程 b 和 c 的并发等待:

1)使用 launch 启动协程 b 和 c,它们会立即开始执行。

2)协程 b 和 c 调用 dataDeferred.await() 挂起自身,直到协程 a 的数据准备完毕。

数据共享与可见性:

1)Deferred 是 Kotlin 协程的轻量级并发原语,确保数据在协程间的安全传递。

2)await() 方法是非阻塞的,协程会在数据就绪后自动恢复执行。

import kotlinx.coroutines.*fun main() = runBlocking {// 协程 a 异步生成数据,返回 Deferred 对象val dataDeferred = async {delay(1000) // 模拟耗时操作(如计算、IO)"Data from Coroutine A"}// 启动协程 b 和 c,它们会并发执行并等待数据val jobB = launch {val data = dataDeferred.await() // 挂起直到数据就绪println("Coroutine B 处理数据: $data")}val jobC = launch {val data = dataDeferred.await() // 挂起直到数据就绪println("Coroutine C 处理数据: $data")}// 等待所有子协程完成joinAll(jobB, jobC)
}
http://www.dtcms.com/wzjs/533116.html

相关文章:

  • 成都网站建设 平易云品牌设计有限公司
  • 如何制作一般企业网站wordpress更换模板
  • 怎么让别人找你做网站阿里云网站架构怎么做
  • 云南购物网站建设美团网站除佣金表格怎么做
  • 设计网站都有什么作用是什么原因义乌网站网站建设
  • 高效网站推广方案北京百度推广电话号码
  • 创建wordpress网站南昌地宝网分类
  • 怎么做网站支付深圳互联网公司招聘
  • 自学考试 网页制作与网站建设06627响应式网站导航
  • 长沙城乡建设网站首页wordpress 无刷新主题
  • 厦门住房和城乡建设局网站海外推广引流
  • 如何做漫画网站郑州网站建设知名公司
  • 织梦网站怎么做优化python编写网页
  • 手工制作方法seo新站如何快速排名
  • 网站后台修改导航栏做情人节网站
  • 舆情网站推荐网站建设规划设计公司排名
  • 旅游网站网页设计方案wordpress痞子
  • 网站应用网站开发小型手机网站建设哪家好
  • 佛山市新城开发建设有限公司网站国内做视频课程的网站有哪些
  • 大连建设教育网站小程序开发流程详解
  • 做网站会后期维护吗如何进入网站后台管理网站
  • 国内外知名建设设计网站花都五屏网站建设
  • 阜宁网站制作服务商2022最新国际新闻10条简短
  • 生成论坛网站wordpress下载连接插件
  • 门户网站开发 项目实施方案专业建设存在问题及改进建议
  • 电子商务网站建设与管理第四章答案品牌建设与市场推广
  • 南昌市建设网站linux建设视频网站
  • 做网站域名和空间费h5模板制作软件
  • 骗子会利用钓鱼网站做啥网站建设佛山
  • 乐山建设局网站成都网站建设有哪些