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

制作网站步骤北京网站优化哪家好

制作网站步骤,北京网站优化哪家好,网站开发需求模板模板,免费制作邀请函的小程序hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:线程之间有哪些通信方式? 在 Java 多线程编程中,线程间通信(Inter-Thread Communica…

hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶

面试官:线程之间有哪些通信方式?

在 Java 多线程编程中,线程间通信(Inter-Thread Communication)的核心目的是协调不同线程的执行顺序或共享数据。以下是线程间通信的常见方式及其实现原理和应用场景:


1. 共享内存 + 同步机制

原理:线程通过共享变量(如对象、集合)交换数据,通过锁(synchronizedLock)或原子类(AtomicInteger 等)保证线程安全。
示例

// 共享变量
private int sharedValue = 0;
private final Object lock = new Object();// 线程 A 写入
synchronized (lock) {sharedValue = 42;lock.notifyAll(); // 通知等待的线程
}// 线程 B 读取
synchronized (lock) {while (sharedValue == 0) {lock.wait(); // 等待通知}System.out.println(sharedValue);
}

适用场景:简单的数据共享,需手动处理同步和竞态条件。


2. 阻塞队列(BlockingQueue)

原理:线程通过线程安全的队列传递数据,生产者写入队列,消费者从队列读取。队列满或空时自动阻塞。
示例

BlockingQueue<String> queue = new LinkedBlockingQueue<>(10);// 生产者线程
queue.put("data"); // 队列满时阻塞// 消费者线程
String data = queue.take(); // 队列空时阻塞

适用场景:生产者-消费者模型,解耦生产与消费逻辑。


3. wait() / notify() / notifyAll()

原理:基于对象监视器(Monitor)的等待-通知机制,需在 synchronized 块中使用。
示例

public class TaskCoordinator {private boolean isReady = false;public void waitForReady() throws InterruptedException {synchronized (this) {while (!isReady) {this.wait(); // 释放锁并等待}}}public void setReady() {synchronized (this) {isReady = true;this.notifyAll(); // 唤醒所有等待线程}}
}

适用场景:线程间的条件协作(如任务启动前的等待)。


4. 同步工具类(Semaphore、CountDownLatch 等)

原理:通过计数器或状态控制线程的执行流程。
常用类

  • CountDownLatch:等待多个线程完成初始化。
    CountDownLatch latch = new CountDownLatch(3);// 工作线程
    latch.countDown(); // 计数器减 1// 主线程
    latch.await(); // 等待计数器归零
    
  • CyclicBarrier:多线程相互等待至屏障点。
    CyclicBarrier barrier = new CyclicBarrier(3);// 每个线程执行到屏障点后等待
    barrier.await();
    
  • Semaphore:控制并发线程数量。
    Semaphore semaphore = new Semaphore(5);semaphore.acquire(); // 获取许可(无可用许可时阻塞)
    semaphore.release(); // 释放许可
    

适用场景:复杂线程协作(如分批任务、资源池管理)。


5. 管道(PipedInputStream / PipedOutputStream)

原理:通过管道流直接传递字节数据,需成对使用。
示例

PipedInputStream pis = new PipedInputStream();
PipedOutputStream pos = new PipedOutputStream();
pis.connect(pos); // 连接输入输出流// 生产者线程写入数据
pos.write("data".getBytes());// 消费者线程读取数据
int data = pis.read();

适用场景:线程间直接传输字节数据(较少使用,性能较低)。


6. Future 和 Callable

原理:通过 Future 获取另一个线程的异步执行结果。
示例

ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Integer> future = executor.submit(() -> {Thread.sleep(1000);return 42;
});// 阻塞等待结果
int result = future.get();

适用场景:异步任务执行与结果获取。


7. 事件驱动(如 EventBus)

原理:基于发布-订阅模式,线程通过事件总线传递消息。
示例(使用 Guava EventBus)

EventBus eventBus = new EventBus();// 订阅者
class Subscriber {@Subscribepublic void handleEvent(String event) {System.out.println("Received: " + event);}
}eventBus.register(new Subscriber());// 发布者线程
eventBus.post("Hello");

适用场景:松耦合的事件通知(如 GUI 事件处理)。


8. 回调(Callback)

原理:线程 A 调用线程 B 的方法时传入回调函数,线程 B 完成任务后调用回调函数通知线程 A。
示例

interface Callback {void onComplete(String result);
}class Worker {void doWork(Callback callback) {new Thread(() -> {String result = "Done";callback.onComplete(result);}).start();}
}// 调用
new Worker().doWork(result -> System.out.println(result));

适用场景:异步任务完成后的通知。


对比与选型建议

通信方式优点缺点适用场景
共享内存 + 同步简单直接需手动处理同步,易出错简单数据共享
阻塞队列线程安全,解耦生产消费队列容量需合理设置生产者-消费者模型
wait/notify灵活的条件控制需搭配 synchronized 使用线程条件协作
同步工具类简化复杂协作逻辑需理解不同工具的特性多线程分阶段协作
Future/Callable支持异步结果获取仅适用于单次任务异步任务执行
事件驱动松耦合,易扩展依赖第三方库(如 EventBus)事件通知场景
回调灵活定制逻辑回调嵌套可能导致“回调地狱”异步任务完成通知

注意事项

  1. 线程安全:共享变量必须通过锁或原子类确保可见性和原子性。
  2. 死锁预防:避免嵌套锁和循环等待资源。
  3. 性能权衡:高并发场景优先选择无锁或细粒度锁(如 ConcurrentHashMap)。
  4. 资源释放:确保 wait() 后能正常唤醒,避免线程永久阻塞。
    在这里插入图片描述
http://www.dtcms.com/wzjs/550276.html

相关文章:

  • 河南有名的做网站公司网站根目录怎么找
  • 网站左侧固定代码个人工商营业执照查询官网
  • 五百人建站银行网站源码
  • 内蒙古网站优化教务系统管理系统
  • 建设网站找什么建设人行官方网站
  • dw网页制作成品代码加图片手机seo百度点击软件
  • 长沙手机网站首页设计公司网络软文发布平台
  • 前端做任务的网站石家庄seo网站优化价格
  • 网站和数字界面设计师廊坊电商网站建设
  • 长沙门户网站建设请简述网络营销的含义
  • 建网站需要什么软件做网站赚金币
  • 获取网站状态源码分享
  • 网站建设的5个步骤是什么免费海报在线制作网站
  • 商贸公司的网站建设学院网站建设服务宗旨
  • 关于做ppt的网站有哪些内容addthis wordpress
  • 网站自动识别移动终端wordpress繁体字插件
  • 淄博便宜网站设微信公众号 做不了微网站
  • 安徽响应式网站推荐扫描网站漏洞的软件
  • 建立html网站wordpress挂载机制
  • 邯郸做商城网站的公司大人和小孩做系列网站
  • 网站建设怎么设置留言界面网站建设之织梦后台熊掌号主页
  • 司法局网站体制机制建设情况软件编程入门自学教程
  • 长春模板网站建站千锋教育培训
  • 毕业设计网站开发实施步骤wordpress 导航 分类
  • 网站建设实践学做电商需要什么条件
  • 做网站备案要多久湖南住房城乡建设厅官方网站
  • 开封网站优化公司网络销售怎么才能找到客户
  • 什么软件可以做网站htmlwordpress 图片模版
  • 网页建站总结报告企业电子网站的建设案例分析
  • 怎么做淘宝客网站赚钱吗网络营销专业是干嘛的