同样是锁,先说说synchronized和lock的区别:
synchronized是java关键字,是用c++实现的;而lock是用java类,用java可以实现
synchronized可以锁住代码块,对象和类,但是线程从开始获取锁之后开发者不能进行控制和了解;lock则用起来非常灵活,提供了许多api可以让开发者去控制加锁和释放锁等等。
写个Demo
static Lock lock = new ReentrantLock();
public static void main(String[] args) throws InterruptedException {
lock.lock();//其他没拿到锁的卡住不动
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("start to get lock Interruptibly");
lock.unlock(); //看看会发生什么,注释掉再看看
lock.lock();
System.out.println("拿到锁");
lock.unlock();
System.out.println("释放锁");
}
});
thread.start();
Thread.sleep(3000);
lock.unlock();
}