Lock(锁)
try{
//加锁
lock.lock();
//代码块
}else {
break;
}
}finally {
//解锁
lock.unlock();
}
import java.util.concurrent.locks.ReentrantLock;
public class TestLock implements Runnable{
int ticNum = 10;
private ReentrantLock lock = new ReentrantLock();
@Override
public void run() {
while (true){
try{
//加锁
lock.lock();
if(ticNum > 0){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(ticNum--);
}else {
break;
}
}finally {
//解锁
lock.unlock();
}
}
}
}
public class Test {
public static void main(String args[]) throws InterruptedException {
TestLock testLock = new TestLock();
new Thread(testLock).start();
new Thread(testLock).start();
new Thread(testLock).start();
}
}
Lock和synchronized的区别
1. lock是显式锁,手动开启和关闭锁,synchronized是隐式锁,出作用域自动释放。
2.lock只能锁代码块,synchronized可以锁代码块和方法
3.lock性能更好