JAVA中volatile synchronized小结

来源:互联网 发布:flv视频修复软件 编辑:程序博客网 时间:2024/05/02 10:49

在java中,volatile,synchronized都是用于多线程中用于数据同步的。

volatile关键字一般修饰成员变量。被volatile修饰的成员变量被多个线程访问时,所有的线程都从共享内存中拷贝一个副本在自己的线程中。当线程中的变量的值发生改变时,将会立即用更新的值更新共享内存中的值。所以,就可以保证该共享变量的值(volatile修饰的成员变量)的一致性

synchronized可以修饰方法,表明某个线程要调用该方法,必须取得该方法的所有者的使用权。比如一个类的名字叫Test.class,它里面有一个非静态方法test()被synchronized修饰,又有一个Test.class类的实例testObject,在某一时刻一个线程想要调用testObject的test()方法,必须保证没有其他的线程在调用testObject的test()方法时它才可以调用testObject.test()方法。此即非常常用的:synchronized(this){}用法,他的意思是你想调用下面的{}内中的代码,你必须先取得该对象的所有权,也即此时this(类的实例)就是一把锁。你只有拥有了这把锁,你才有权利执行下面的{}中的代码。所以,如果一个对象中(类的实例)有2个或者多个synchronized修饰的方法或者代码块, 在同一时刻只有一个线程可以调用该对象里面的一个被synchronized修饰的方法. 而对于被static修饰的静态方法或者静态代码块,由于他们是属于类的,所以在任一时刻,一个线程只有取得了该类的所有权,才能执行静态的同步方法或者同步代码块

 

原创粉丝点击