返回章节
🔄 第7章测试:线程间通信
测试你对Java线程间通信机制的理解程度
1
关于volatile关键字的作用,以下说法正确的是?
只保证变量的原子性
保证变量的可见性和有序性
可以替代synchronized关键字
只在多核CPU上有效
解析:
volatile关键字主要保证变量的可见性和有序性,但不保证原子性。它确保一个线程对变量的修改对其他线程立即可见,并防止指令重排序。
2
Semaphore信号量的主要作用是什么?
控制同时访问特定资源的线程数量
实现线程间的数据交换
等待所有线程完成任务
提供线程间的消息传递
解析:
Semaphore是一个计数信号量,用于控制同时访问特定资源的线程数量。它维护了一组许可证,线程在访问资源前必须获取许可证,访问完成后释放许可证。
3
CountDownLatch和CyclicBarrier的主要区别是什么?
CountDownLatch可以重复使用,CyclicBarrier不能
CyclicBarrier可以重复使用,CountDownLatch不能
两者功能完全相同
CountDownLatch性能更好
解析:
CyclicBarrier可以重复使用,当所有线程到达屏障点后,屏障会重置并可以再次使用。而CountDownLatch是一次性的,计数器减到0后就不能重置。
4
管道通信(PipedInputStream/PipedOutputStream)最适合哪种场景?
多个生产者和多个消费者
一个生产者和一个消费者的数据流传输
线程间的状态同步
高并发的数据访问控制
解析:
管道通信主要用于一个生产者线程和一个消费者线程之间的数据流传输,提供了一种简单的流式数据传递机制。
5
Exchanger类的主要用途是什么?
多个线程之间交换数据
两个线程之间在同步点交换数据
控制线程的执行顺序
实现线程池的任务分配
解析:
Exchanger提供了一个同步点,专门用于两个线程之间交换数据。每个线程在进入exchange方法后会等待另一个线程到达,然后交换数据。
6
以下哪种原子变量操作是线程安全的?
AtomicInteger.get()
AtomicInteger.incrementAndGet()
AtomicInteger.compareAndSet()
以上都是线程安全的
解析:
AtomicInteger类的所有操作都是线程安全的,包括get()、incrementAndGet()、compareAndSet()等方法,它们都使用了底层的原子操作来保证线程安全。
提交答案
0/6
加载中...
重新测试