模板云网站建设,云南省建设厅网站二级建造师,物流企业网站有哪些,安徽建工招采平台1. 如何实现乐观锁(CAS)#xff1f;如何避免ABA问题#xff1f;答#xff1a;1)读取内存值的方式实现了乐观锁(比如#xff1a;SVN系统)#xff0c;方法#xff1a;第一#xff0c;比较内存值和期望值#xff1b;第二#xff0c;替换内存值为要替换值。2)带参数版本来…1. 如何实现乐观锁(CAS)如何避免ABA问题答1)读取内存值的方式实现了乐观锁(比如SVN系统)方法第一比较内存值和期望值第二替换内存值为要替换值。2)带参数版本来避免aba问题在读取和替换的时候进行判定版本是否一致2. 读写锁可以用于什么应用场景答 读写锁可以用于 “多读少写” 的场景读写锁支持多个读操作并发执行写操作只能由一个线程来操作ReadWriteLock对向数据结构相对不频繁地写入但是有多个任务要经常读取这个数据结构的这类情况进行了优化。ReadWriteLock使得你可以同事有多个读取者只要它们都不试图写入即可。如果写锁已经被其他任务持有那么任何读取者都不能访问直至这个写锁被释放为止。ReadWriteLock 对程序心性能的提高受制于如下几个因素也还有其他等等的因素。1)数据被读取的频率与被修改的频率相比较的结果。2)读取和写入的时间3)有多少线程竞争4)是否在多处理机器上运行3. 什么时候应该使用可重入锁答重入锁指的是在某一个线程中可以多次获得同一把锁在线程中多次操作有锁的方法。4. 什么场景下可以使用volatile替换synchronized答 只需要保证共享资源的可见性的时候可以使用volatile替代synchronized保证可操作的原子性一致性和可见性。volatile适用于新值不依赖于就值的情形。volatile是java提供的一种同步手段只不过它是轻量级的同步为什么这么说因为volatile只能保证多线程的内存可见性不能保证多线 程的执行有序性。而最彻底的同步要保证有序性和可见性例如synchronized。任何被volatile修饰的变量都不拷贝副本到工作内存任何 修改都及时写在主存。因此对于Valatile修饰的变量的修改所有线程马上就能看到但是volatile不能保证对变量的修改是有序的。volatile存在的意义是任何线程对某个变量的修改都会马上被其他线程读取到因为直接操作主存 没有线程对工作内存和主存的同步。所以volatile的使用场景是有限的在有限的一些情形下可以使用 volatile 变量替代锁(synchronized)。要使 volatile 变量提供理想的线程安全,必须同时满足下面两个条件:1)对 变量的写操作不依赖于当前值。2)该变量没有包含在具有其他变量的不变式中