-
Notifications
You must be signed in to change notification settings - Fork 785
2019-05-16:synchronized和volatile关键字的区别? #55
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
synchronized保证了程序执行的可见性和原子性; |
1.volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取; synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。 |
synchronized 可以保证原子性。他可以保证 在同一时刻,只有一个线程可以访问被 synchronized 修饰的方法,或者代码块。 |
打卡打卡 synchronized 可以保证原子性,可以用来进行线程同步,防止多线程出现的问题,可修饰 方法、类、代码块 volatile 不能保证原子性。我记得我在加解密网络请求的封装内见过,可以让其具有可见性,多线程操作时能发现olatitle 修饰字段的值变化 |
1、volatile不会进行加锁操作 |
0、volatile的本质上是告诉JVM当前变量的值是不确定的,需要得到及时的更新,所以会把它放到工作内存当中,而synchronized会锁定该变量,只有当前线程可以访问,其他线程会被阻塞。volatile不会造成线程阻塞,synchronized则有可能会出现。 1、volatile在线程同步情况下,要比synchronized性能要好,但是volatile只能作用于变量上,而synchronized可以作用于方法或代码块 2、volatile可以保证变量的可见性,但不能保证原子性,而synchronized可以保证两者 3、volatile解决的是多个线程对变量的可见性,而synchronized解决的是多个线程之间访问资源的同步问题 |
volatile可以保证内存可见性、有序性(禁止指令重排); |
No description provided.
The text was updated successfully, but these errors were encountered: