解决线程安全问题方法

Isadora ·
更新时间:2024-11-10
· 647 次阅读

解决多线程导致的线程安全问题: 1:同步代码块 格式: synchronized(锁对象){ 可以会出现线程安全问题的代码(访问了共享数据的代码) } 注意:

1:通过代码块中的锁对象,可以使用任意对象(一般直接object)

2: 但是必须保证多个线程使用的锁对象是同一个

3:锁对象作用:把同步代码块锁住,只让一个线程在同步代码块中执行

2:定义同步方法 格式: 权限修饰符 synchronized 返回值类型 方法名(参数){ 可以会出现线程安全问题的代码(访问了共享数据的代码) }

使用步骤:
将访问了共享数据的代码写成一个方法,方法添加synchronized修饰符

定义一个同步方法,方法也会将内部代码锁住,只让一个线程执行,
同步方法的锁对象就是实现类 new RunnableImpl,也就是this

静态同步方法的锁对象是本类的class属性—>class文件对象(反射)
不能是this了,this是创建对象后产生的,静态方法优先于对象

3:Lock锁

java.util.concurrent.locks.lock接口
Lock实现 提供了比使用synchronized方法和语句可获得的更广泛的锁定操作

Lock接口的方法:
void lock() 获取锁
void unlock() 释放锁

使用步骤:

1:在成员位置创建一个ReentrantLock对象(接口的实现类对象)

2:在可能出现安全问题的代码前调用lock锁方法开启锁

3:在可以出现安全问题的代码后调用unlock锁方法关闭锁


作者:ready lunch



方法 线程安全 线程

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章