synchronized和lock区别
synchronized
synchronized是关键字
有以下三种使用方法:
-
静态方法加上关键字 类
-
实例方法(也就是普通方法)加上关键字 方法
-
方法中使用同步代码块 代码块
有两种加锁方式:
-
锁住类
-
锁住对象实例
1 实现的是非公平锁,锁执行后会自动释放。
2 使用synchronized,其它线程会一直等待下去,直至执行完。
lock
lock是一个接口 他是一个包含公平锁和非公平锁,包含多个接口,使用Lock必须手动释放锁。
Lock可以让等待锁的线程响应中断,而synchronized不会,线程会一直等待下去。
通过Lock可以知道线程有没有拿到锁,而synchronized不能。
Lock能提高多个线程读操作的效率。
尝试获取锁 成功返回true 失败返回false 这样就可以检验是否已经锁被释放了
这个是trylock的重载方法,可以设置一个时间值 当到达这个时间 才会返回true和false
也就是在参数范围内,则不会立即返回值,会等待一段时间,这个时间就是传入的具体参数值,在这个时间内获取锁成功,则依旧返回true;
当过了参数范围后,还是获取锁失败,则立即返回false。
还有就是
void unlock(); 需要执行完手动来释放锁。