前言
synchronized 关键字是jdk提供的一种原子性内置锁。java中的每个对象都可以当做一个同步锁来使用,这些java内置的,使用者看不到的锁被称为内部锁,也叫做监视器锁。
线程的执行:代码在进入synchronied代码块前,会自动获取内部锁,这时候其他线程访问该代码块时会被阻塞挂起。拿到内部锁的线程会在正常退出代码块、抛出异常、调用内置锁资源的wait系统方法时释放该内置锁。
内置锁:它是排他锁(一个线程获取锁后,其他线程必须等待该线程释放锁后才能获取到锁)
作用
因为并发编程中存在线程安全问题,使用synchronied 关键字能够有效的避免多线程环境下的线程安全问题。
线程安全问题要考虑点
- 多线程下,存在共享数据
- 多线程下,操作了共享数据
- 多线程下,操作涉及了增删改操作
使用方式
- 实例方法:锁当前实例对象,进入同步代码前获取当前实例的锁
- 静态方法:锁当前类的class 对象,进行同步代码前获取当前类对象的锁
- 同步方法块:锁是括号里面的对象,对给定对象加锁,进入同步代码前获取给定对象锁