答案是:会,还会继续执行下面的代码。不会进入异常。
因此实际业务中,需要按照tryLock的返回值,进行判断后执行后面的业务代码
使用tryLock()尝试获取一次锁,若获取成功,标记下是该线程获取到了锁,然后返回true;若获取失败,此时直接返回false,之后往下操作
具体示例:
1:tryLock(long time, TimeUnit unit)
package test;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author :sunshine
* @date :Created in 2021/11/3 17:22
* @description:T03_ReentrantLock3
*/
public class T03_ReentrantLock3 {
Lock lock = new ReentrantLock();
void m1(){
try{
lock.lock();
for(int i = 0; i< 10 ; i++){
TimeUnit.SECONDS.sleep(1);
System.out.println(i);
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
void m2(){
boolean flag = false;
try {
flag = lock.tryLock(5,TimeUnit.SECONDS);
//lock.lock();
System.out.println("m2--------locked="+flag);
} catch (Exception e) {
System.out.println("m2--------异常");
e.printStackTrace();
}finally {
if(flag) lock.unlock();
}
}
public static void main(String[] args) {
T03_ReentrantLock3 rl = new T03_ReentrantLock3();
new Thread(rl::m1).start();
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
new Thread(rl::m2).start();
}
}
输出结果如下:
2:tryLock()
将m2改成tryLock后:
void m2(){
boolean flag = false;
try {
//flag = lock.tryLock(5,TimeUnit.SECONDS);
//lock.lock();
flag = lock.tryLock();
System.out.println("m2--------locked="+flag);
} catch (Exception e) {
System.out.println("m2--------异常");
e.printStackTrace();
}finally {
if(flag) lock.unlock();
}
}
输出结果如下: