校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > java语言 > synchronized、volatile(后续会删除)
题目

Volatile和Synchronized四个不同点:

解答

1 粒度不同,前者针对变量 ,后者锁对象和类

2 syn阻塞,volatile线程不阻塞

3 syn保证三大特性,volatile不保证原子性

4 syn编译器优化,volatile不优化 volatile具备两种特性:

①保证此变量对所有线程的可见性,指一条线程修改了这个变量的值,新值对于其他线程来说是可见的,但并不是多线程安全的。

②禁止指令重排序优化。

Volatile如何保证内存可见性:

①当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存。

②当读一个volatile变量时,JMM会把该线程对应的本地内存置为无效。线程接下来将从主内存中读取共享变量。

同步:就是一个任务的完成需要依赖另外一个任务,只有等待被依赖的任务完成后,依赖任务才能完成。

异步:不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,只要自己任务完成了就算完成了,被依赖的任务是否完成会通知回来。(异步的特点就是通知)。 打电话和发短信来比喻同步和异步操作。

阻塞:CPU停下来等一个慢的操作完成以后,才会接着完成其他的工作。

非阻塞:非阻塞就是在这个慢的执行时,CPU去做其他工作,等这个慢的完成后,CPU才会接着完成后续的操作。

非阻塞会造成线程切换增加,增加CPU的使用时间能不能补偿系统的切换成本需要考虑。

C 1条回复 评论
带脑斧

我想咨询下,如果是做产品经理,考研可以考哪些相关专业

发表于 2021-09-09 14:45:00
0 0