您的位置:首页 > 编程语言 > Java开发

Java线程中对象及变量的并发访问

2017-02-20 23:13 176 查看
(1)非线程安全问题存在于实例变量中,如果方法内部的私有变量,则不存在非线程安全的问题,所得结果也就是线程安全的了。方法中的变量不存在线程安全问题,永远都是线程安全的,这是方法内部的变量是私有的特性所造成的。

(2)在两个线程访问同一个对象中的同步方法是一定是线程安全。

(3)调用关键字synchronized声明的方法一定是排队运行的,要牢记共享这两个字,只有共享资源的读写访问才需要同步化,如果不是共享资源,那根本就没有同步的必要。

(4)A线程先持有object对象的Lock锁,B线程可以异步的方式调用object对象中的非synchronized类型的方法。

(5)A线程先持有object对象的Lock锁,B线程如果在这时调用object对象中的synchronized类型的方法则需要等待,也就是同步。

(6)关键字Synchronized拥有锁重入放入功能,也就是在使用该关键字时,当一个线程得到一个对象锁后,再次请求次对象锁时是可以再次得到该对象的锁的。

出现异常,锁自动释放。

(7)同步不具有继承性。

(8)Synchronized方法是对当前对象进行加锁,而synchronized代码块是对某一个对象进行加锁。

(9)在使用同步synchronized(this)代码块时需要注意的是,当一个线程访问object的一个synchronized(this)同步代码块时,其它线程对同一个object中所有其它synchronized(this)

(10)同步代码块的访问将被阻塞,这说明synchronized使用的对象监视器是一个。

(11)多个线程调用同一个对象中的不同名称的synchronized同步方法或synchronized(this)同步代码块时,调用的效果就是按顺序执行,也就是同步的,阻塞的。

(12)synchronized同步方法的作用:

1) 对其他synchronized同步方法或synchronized(this)同步代码块调用呈阻塞状态。

2) 同一时间只有一个线程可以执synchronized同步代码块中的代码。

(13)synchronized(this)同步代码的作用:

1) 对其他synchronized同步方法或synchronized(this)同步代码调用呈阻塞状态。

2) 同一时间只有一个线程可以执synchronized同步方法中的代码。

(14)Synchronized关键字加到static静态方法上是给Class类上锁,而synchronized关键字加到非static静态方法上是给对象上锁。

(15)关键字volatile的主要作用:

1)使变量在多个线程间可见。

2)该关键字是强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值。

3)增加了实例变量在多个线程之间的可见性,

缺点:该关键字就是不支持原子性(同步性)。

主要应用的场合是在多个线程中可以感知实例变量被更改,并且可以获取最新的值使用,也就是用多线程读取共享变量时可以获得最新值使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: