网站制作绩效考核表,西安阿里云网站建设,论文网站建设与运营,南昌做seo的公司文章目录一、同步代码块二、同步方法静态同步方法三、Lock解决线程安全问题的三种方案#xff1a;同步代码块、同步方法、使用 Lock一、同步代码块
synchronized(同步锁对象) {
需要同步操作的代码
}注#xff1a; 1.锁对象可以是任意对象 2.必须保证多个线程使用同一个锁对…
文章目录一、同步代码块二、同步方法静态同步方法三、Lock解决线程安全问题的三种方案同步代码块、同步方法、使用 Lock一、同步代码块
synchronized(同步锁对象) {
需要同步操作的代码
}注 1.锁对象可以是任意对象 2.必须保证多个线程使用同一个锁对象
问为什么随便放个对象就可以锁住代码块呢什么原理
二、同步方法
public synchronized void method() {
可能会产生线程安全问题的代码
}注同步方法默认使用当前对象作为锁对象也就是当前方法的所属实例对象即 this
静态同步方法
public static synchronized void method() {
可能会产生线程安全问题的代码
}注锁对象是当前类的 Class 对象。
三、Lock
Lock 是一个接口其中有两个抽象方法
public abstract void lock(); // 获取锁
public abstract void unlock(); // 释放锁在存在线程安全问题的代码所在类中声明定义一个成员变量变量存放接口 Lock 实现类对象的内存地址如下所示
Lock lock new ReentrantLock(); // ReentrantLock 是接口 Lock 的实现类然后在存在线程安全问题的代码执行前加锁
lock.lock();代码执行结束后释放锁
lock.unlock();建议将 lock.unlock() 放在 finally {} 语句块中无论是否出现异常都会释放锁