Java语言中,锁的概念是用来控制对共享资源文件独占访问权限的类,当其中一个线程获取了对象锁,在释放掉锁之前,其他线程是没有办法对该资源进行访问的。所以每次仅有一个线程可以获取锁,其他线程只能等待锁的释放在抢占锁。
本文介绍的是 ReentrantLock类的锁方法使用,lock加锁;unlock 解锁;trylock定时上锁的代码演示。
1. 首先,如果不上锁的情况下:线程A,B交替打印时,会发生线程A未完成打印,线程B就开始执行的情况,这就是上锁的意义所在,可以通过锁控制线程A,B依次顺序打印,参考图片:
2. 接下来,我们使用lock方法来强制上锁, lock方法的特点:一旦用了lock(),一切其他线程的interrupt都不会中断锁,除非锁对象自身调用了unlock方法来释放锁资源
代码举例和执行结果:(请注意看lock.lock()的位置)
3. 使用trylock方法,trylock是条件判断,当true时,上锁,否则false,没有获取锁
4. 使用 trylock(time, UnitTime)带参数的trylock是间隔时间内,如果获取到锁,返回true,否则false, 这里用了while (true)循环,确保获取到锁,才break,否则,循环做锁的获取,直至成功被lock住。参考代码:
小结:
lock 在使用中,强制上锁,不会被其他线程interrupt住;而trylock可以在规定的interval时间内,尝试获取锁,如果获取到,返回true,否则false。trylock随时可以被其他线程interrupt中断掉。