首页 > 其他 > 详细

锁(Lock)

时间:2021-04-10 01:04:35      阅读:11      评论:0      收藏:0      [点我收藏+]

锁(lock)

package gaoji;
?
import java.util.concurrent.locks.ReentrantLock;
?
public class TestLock {
?
   public static void main(String[] args) {
       TestLock2 testLock2 = new TestLock2();
?
       new Thread(testLock2).start();
       new Thread(testLock2).start();
       new Thread(testLock2).start();
  }
?
}
class TestLock2 implements Runnable{
   int ticketNums = 10;
?
   //定义lock锁,ReentrantLock可重置锁
   private final ReentrantLock lock = new ReentrantLock();
?
   @Override
   public void run() {
       while (true){
           try {
               lock.lock();//加锁
               if (ticketNums > 0){
                   try {
                       Thread.sleep(1000);
                  } catch (InterruptedException e) {
                       e.printStackTrace();
                  }
                   System.out.println(ticketNums--);
              }else{
                   break;
              }
          }finally {
               lock.unlock();//解锁
          }
      }
  }
}
?

synchronized 与 Lock的对比

  • Lock是显示锁(手动开启和关闭锁,别忘记关闭锁)synchronized是隐式锁,出了作用域自动释放

  • Lock只有代码块锁,synchronized有代码块锁和方法锁

  • 使用Lock锁,JVM将花费较少的时间来调度线程,性能更好,并且具有更好的扩展性(提供更多的子类)

  • 优先使用顺序:

    Lock > 同步代码块(已经进入了方法体,分配了相应资源)>同步方法(在方法体之外)

  •  

锁(Lock)

原文:https://www.cnblogs.com/changhanbing/p/14638733.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!