并发编程基础知识测试
并发是逻辑上的同时进行,可以通过时间片轮转在单核CPU上实现;而并行是物理上的同时进行,需要多核CPU的支持。
在Java内存模型中,主内存是所有线程共享的区域,存储所有变量的主副本;而工作内存是每个线程私有的。
在Java中,对基本数据类型(除long和double外)的简单赋值操作是原子性的。i++和i=i+1都包含读取、修改、写入三个步骤,不是原子操作。
可见性问题确实是由于线程的工作内存导致的,synchronized可以保证可见性。选项C和D都是正确的,但C更直接地解释了可见性问题的根本原因。
指令重排序是编译器和处理器为了提高程序执行性能而进行的优化,但在多线程环境下可能会导致有序性问题。
竞态条件发生在多个线程同时访问和修改共享数据时,最终结果依赖于线程执行的时序。
store操作是将工作内存中的变量值传送到主内存,write操作是将store传送的值写入主内存的变量中。
并发编程实际上会使程序逻辑变得更加复杂,需要考虑线程安全、同步等问题,而不是简化程序逻辑。
内存泄漏虽然是程序中的问题,但它不是特定的线程安全问题。竞态条件、数据竞争和死锁都是典型的线程安全问题。
使用不可变对象是多线程编程的最佳实践之一,因为不可变对象天然线程安全,不需要额外的同步机制。