你的位置:首页 > 软件开发 > Java > synchronized和lock比对

synchronized和lock比对

发布时间:2017-03-11 00:00:39
前言:在上面的博客说了synchronized的一些用法,下面我们再来看看lock,这个出现频率也是非常高的一个。1:获取Lock锁的几种方式前面说了synchronized有锁对象和锁类对象,当某个线程获取锁其他线程必须等待执行完毕才可继续进行,比如线程A先获取锁,但是出现异常 ...

synchronized和lock比对

前言:在上面的博客说了synchronized的一些用法,下面我们再来看看lock,这个出现频率也是非常高的一个。

1:获取Lock锁的几种方式

前面说了synchronized有锁对象和锁类对象,当某个线程获取锁其他线程必须等待执行完毕才可继续进行,比如线程A先获取锁,但是出现异常导致的后果就是线程B无法获取锁,会出现死锁的情况(http://www.cnblogs.com/LipeiNet/p/6475851.html),那么我们一起看看Lock是如何解决的。lock有4种方式来获取锁

1:lock.lock() 如果获取了锁立即返回,如果别的线程持有锁,当前线程则一直处于休眠状态,直到获取锁。此种模式和synchronized一样但是不会出现死锁

public class Lock1 {  static int value = 0;  static Lock lock = new ReentrantLock();  static class Task1 implements Runnable {    public void run() {      System.out.println("线程" + Thread.currentThread().getName() + "开始执行");      lock.lock();      try {        for (int i = 0; i < 1000000; i++) {          value++;        }        System.out.println(value);      } finally {        lock.unlock();      }    }  }  static class Task2 implements Runnable {    public void run() {      System.out.println("线程" + Thread.currentThread().getName() + "开始执行");      lock.lock();      try {        for (int i = 0; i < 1000000; i++) {          value++;        }        System.out.println(value);      } finally {        lock.unlock();      }    }  }  public static void main(String[] args) {    ExecutorService service= Executors.newCachedThreadPool();    service.execute(new Task1());    service.execute(new Task2());    service.shutdown();  }}

原标题:synchronized和lock比对

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录