- 方法中的变量不存在非线程安全问题,永远都是线程安全的,这是因为方法内部的变量是私有的特性造成的。
- synchronized锁加在方法上,锁的是对象。效果同synchronized(this)
- synchronized加在静态方法上,锁的是类。效果同synchronized(class.Class)。
- 多个对象多个锁。两个线程分别访问同一个类的两个不同实例的相同名称的同步方法,效果却是以异步的方式运行的。关键字synchronized取得的锁都是对象锁,而不是把一段代码或方法当作锁,哪个线程先执行带synchronized关键字的方法,哪个线程就持有该方法所属对象的锁Lock,那么其他线程只能呈等待状态,前提是多个线程访问的是同一个对象。但如果多个线程访问多个对象,则JVM会创建多个锁。同步的单词为synchronized,异步的单词为asynchronized。
- 加不加锁主要看:执行方法时,方法内有没有数据可能在其他地方(其他线程)被修改。例如类变量,数据库读写。
对线程安全的理解
最新推荐文章于 2023-02-10 00:29:11 发布