解决线程安全问题方法

解决多线程导致的线程安全问题:

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锁方法关闭锁


发布了14 篇原创文章 · 获赞 12 · 访问量 3216

猜你喜欢

转载自blog.csdn.net/qq_44333505/article/details/105221997