Lock锁

lock(锁)

  • 从jdk5.0开始java提供了更强大的线程同步机制——通过显示定义同步锁对象来实现同步。同步锁使用lock对象充当

  • java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享资源ed独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock对象

  • ReentrantLock类实现了lock,它拥有也Synchronize相同的并发性和内存语义,在实现线程安全的控制中,比较常用的ReentrantLock,可以显示加锁,释放锁

Synchronize与Lock的对比

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

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

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

  • 优先使用顺序

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

package BufferedTest;
?
import java.util.concurrent.locks.ReentrantLock;
?
public class TestLock {
  public static void main(String[] args) {
      testLock5 testLock = new testLock5();
      new Thread(testLock).start();
      new Thread(testLock).start();
      new Thread(testLock).start();
?
  }
}
class testLock5 implements Runnable{
  private int ticketNums = 10;
  private final ReentrantLock lock = new ReentrantLock();//定义loke锁
  @Override
  public void run() {
      while(true){
          try{
              lock.lock();
              if (ticketNums >= 0){//try捕捉
                  try {
                      Thread.sleep(1000);
                  } catch (InterruptedException e) {
                      e.printStackTrace();
                  }
                  System.out.println(ticketNums--);
              }
              else {
                  break;
              }
?
          }finally {
              lock.tryLock();//try退出,loke锁
?
          }
?
      }
?
?
  }
}

Lock锁

上一篇:C语言_输出规定符


下一篇:C# WinFrom 中程序完全退出,终止