格式:
synchronized(锁对象){
可以会出现线程安全问题的代码(访问了共享数据的代码)
}
注意:
1:通过代码块中的锁对象,可以使用任意对象(一般直接object)
2: 但是必须保证多个线程使用的锁对象是同一个
3:锁对象作用:把同步代码块锁住,只让一个线程在同步代码块中执行
2:定义同步方法 格式:
权限修饰符 synchronized 返回值类型 方法名(参数){
可以会出现线程安全问题的代码(访问了共享数据的代码)
}
使用步骤:
将访问了共享数据的代码写成一个方法,方法添加synchronized修饰符
定义一个同步方法,方法也会将内部代码锁住,只让一个线程执行,
同步方法的锁对象就是实现类 new RunnableImpl,也就是this
静态同步方法的锁对象是本类的class属性—>class文件对象(反射)
不能是this了,this是创建对象后产生的,静态方法优先于对象
java.util.concurrent.locks.lock接口
Lock实现 提供了比使用synchronized方法和语句可获得的更广泛的锁定操作
Lock接口的方法:
void lock() 获取锁
void unlock() 释放锁
使用步骤:
1:在成员位置创建一个ReentrantLock对象(接口的实现类对象)
2:在可能出现安全问题的代码前调用lock锁方法开启锁
3:在可以出现安全问题的代码后调用unlock锁方法关闭锁