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

iis发布php网站免费发布信息

iis发布php网站,免费发布信息,虚拟网站多少钱,Wordpress必备chaj目录 线程通信的定义使用 wait() / notify() 通信使用 join() 实现线程串行使用 volatile 实现可见性通信使用 LockSupport使用 Condition使用 BlockingQueue使用 CountDownLatch、CyclicBarrier、Semaphore使用 Future / CompletableFuture总结 1.线程通信的定义 线程通信是…

目录

  1. 线程通信的定义
  2. 使用 wait() / notify() 通信
  3. 使用 join() 实现线程串行
  4. 使用 volatile 实现可见性通信
  5. 使用 LockSupport
  6. 使用 Condition
  7. 使用 BlockingQueue
  8. 使用 CountDownLatchCyclicBarrierSemaphore
  9. 使用 Future / CompletableFuture
  10. 总结

1.线程通信的定义

线程通信是指多个线程在协同完成某个任务时,为了数据同步或协作调度而相互传递信息或等待状态变化的机制。

常见目的:

  • 数据共享同步(生产者-消费者)
  • 控制线程顺序(线程 A -> 线程 B)
  • 等待某一条件满足后继续执行

2.使用 wait() / notify() 通信

最基础的通信方式,依赖对象锁和监视器机制。

示例:

class Shared {private boolean ready = false;public synchronized void waitForSignal() throws InterruptedException {while (!ready) {wait(); // 释放锁 + 阻塞}System.out.println("Signal received!");}public synchronized void sendSignal() {ready = true;notify(); // 唤醒等待线程}
}

特点:

  • 必须配合 synchronized 使用
  • wait() 会释放锁,notify() 不会
  • 建议使用 while 判断条件防止虚假唤醒

3.使用 join() 实现线程串行

等待其他线程执行完成,适合线程之间有执行顺序依赖的场景。

示例:

Thread t1 = new Thread(() -> {System.out.println("T1 done");
});
Thread t2 = new Thread(() -> {try {t1.join();System.out.println("T2 done after T1");} catch (InterruptedException e) {}
});t1.start();
t2.start();

4.使用 volatile 实现可见性通信

适用于简单的标志状态共享,如线程停止。

示例:

class Flag {volatile boolean stop = false;
}Flag flag = new Flag();new Thread(() -> {while (!flag.stop) {// do work}
}).start();Thread.sleep(1000);
flag.stop = true;

特点:

  • 保证线程间变量的可见性
  • 不保证原子性
  • 适合轻量级信号传递

5.使用 LockSupport

线程阻塞和唤醒的底层工具,替代 wait/notify,无需加锁。

示例:

Thread t = new Thread(() -> {System.out.println("Thread park");LockSupport.park();System.out.println("Thread unparked");
});
t.start();Thread.sleep(1000);
LockSupport.unpark(t);

特点:

  • 每个线程有一个许可证(类似信号量)
  • 更灵活,不依赖同步锁
  • 常用于实现框架级线程调度

6.使用 Condition

Lock 的增强版 wait/notify,支持多个条件队列。

示例:

Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();Thread t1 = new Thread(() -> {lock.lock();try {condition.await(); // 类似 wait()System.out.println("Thread t1 resumed");} catch (InterruptedException e) {} finally {lock.unlock();}
});Thread t2 = new Thread(() -> {lock.lock();condition.signal(); // 类似 notify()lock.unlock();
});

特点:

  • 可精准唤醒特定条件队列中的线程
  • 支持多个等待队列

7.使用 BlockingQueue

适合生产者-消费者模式,线程安全队列内置通信机制。

示例:

BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(5);new Thread(() -> {try {queue.put(1); // 阻塞直到有空间} catch (InterruptedException e) {}
}).start();new Thread(() -> {try {Integer value = queue.take(); // 阻塞直到有元素System.out.println("Consumed: " + value);} catch (InterruptedException e) {}
}).start();

8.使用 CountDownLatch/CyclicBarrier/Semaphore

CountDownLatch

用于一个线程等待多个线程完成:

CountDownLatch latch = new CountDownLatch(2);new Thread(() -> {latch.countDown(); // 执行完毕
}).start();latch.await(); // 等待所有线程执行完

CyclicBarrier

适合多个线程在某个点同步:

CyclicBarrier barrier = new CyclicBarrier(3, () -> {System.out.println("All threads reached barrier");
});new Thread(() -> {barrier.await();
}).start();

Semaphore

用于控制线程数量(资源数):

Semaphore semaphore = new Semaphore(2); // 允许2个线程同时访问semaphore.acquire();
try {// 访问共享资源
} finally {semaphore.release();
}

9.使用 Future / CompletableFuture

线程间通过结果对象通信,适合异步执行与回调。

示例:

ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(() -> {return "result";
});String result = future.get(); // 阻塞直到任务完成

CompletableFuture

CompletableFuture.supplyAsync(() -> "Hello").thenApply(str -> str + " World").thenAccept(System.out::println);

总结

方式适用场景是否阻塞特点
wait/notify精细通信必须配合锁
join等待线程完成简单串行依赖
volatile状态通知可见性但无原子性
LockSupport框架底层调度灵活、无锁
Condition多条件控制精细唤醒
BlockingQueue生产者消费者内置通信机制
CountDownLatch等待一组线程一次性门闩
CyclicBarrier多线程集结可重复使用
Semaphore控制访问数量控制并发度
Future/CompletableFuture异步编程支持回调返回值通信
http://www.dtcms.com/wzjs/297641.html

相关文章:

  • 大连学网站制作软件开发培训班
  • dw做网站的实用特效企业培训课程体系
  • 网站建设和优全媒体运营师报名入口
  • 做网站是否要备案三亚网络推广
  • 局域网内建网站百度首页百度
  • 电商大数据平台建设方案seo需要什么技术
  • 个人做企业 网站seo前线
  • 女性pose拍照seo文章是什么
  • 阿里云最低服务器可以做几个网站seo优化网站模板
  • 网站没备案怎么做广告联盟百度官方客服平台
  • 徐州企业做网站网站建网站建设网站
  • 继续网站建设百度霸屏推广一般多少钱
  • 贵州做团队培训的网站指数函数和对数函数
  • magento 做的最牛逼的中文网站新手如何涨1000粉
  • 襄阳电商网站建设手机管家一键优化
  • 东莞做网站找微客巴巴aso优化{ }贴吧
  • 江西南昌网站开发网络推广的基本方法
  • 门户做网站搜索引擎优化策略不包括
  • 免费b站不收费企业推广方法
  • 网页设计汽车网站建设关键词优化课程
  • 北京个人网站建设网络服务商在哪咨询
  • wordpress设置菜单密码seo技术教学视频
  • 做打鱼网站需要多少钱搜索引擎优化网页
  • 帮别人设计网站的网站吗网站关键词优化代理
  • 网站做sem能够提高收录量吗网络培训心得体会
  • 做 在线观看免费网站搜狐财经峰会直播
  • 做国际物流需要哪些网站网站设计服务企业
  • 珠海网络推广广州seo托管
  • 深圳市住房和建设局网站变更seo外包上海
  • 福永网站建设阿里关键词排名查询