对比:
- lock是显式锁(就是手动开锁,手动关锁),synchronized是隐式的,出了作用于自动释放锁
- Lock只有代码块锁,synchsynaronized有代码块锁还有方法锁
- Lock锁,jvm会使用更少的时间调度线程,性能更好,提供了很多子类,拓展性好
- 优先顺序:Lock>同步代码块>同步方法
1.Lock的使用
建议写finally释放锁,就像IO流关闭一样,
public class TestThread4 implements Runnable{
//票
private int ticketNum=10;
private final ReentrantLock lock=new ReentrantLock();//可重入锁
@Override
public void run() {
try {
lock.lock();
while(true){
if(ticketNum<=0){
break;
}
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"---拿到了票:"+ticketNum--);
}
} finally {
lock.unlock();
}
}
public static void main(String[] args) {
TestThread4 testThread4=new TestThread4();
//可用共同资源
new Thread(testThread4,"张三").start();
new Thread(testThread4,"李四").start();
new Thread(testThread4,"王五").start();
}
}
2.synchsynaronized的使用,换了TestThread4里的代码
public class TestThread4 implements Runnable{
//票
private int ticketNum=10;
Object obj = new Object();
@Override
public void run() {
synchronized (obj){
while(true){
if(ticketNum<=0){
break;
}
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"---拿到了票:"+ticketNum--);
}
}
}
本文对比了Lock和synchronized在Java并发编程中的不同。Lock提供更细粒度的控制和更好的性能,支持非阻塞等待和尝试获取锁,而synchronized则更简单,自动释放锁。Lock适用于更复杂的锁需求,而synchronized适用于简单的同步场景。
911

被折叠的 条评论
为什么被折叠?



