1、认识

十一、并发编程之Lock接口的认识与使用

2、优势

  • Lock 类似于synchronized,具有相同的互斥性和内存可见性,但是更加灵活,加锁和放锁可以由使用者自己确定,Synchronized不需要显示地获取和释放锁,简单
  • 可以方便的实行公平性
  • 非阻塞的获取锁
  • 能被中断的获取锁,synchronized锁可能出现异常而导致中断,无法释放锁,但是通过使用lock,可以直接将lock放在异常finally中,强制释放锁。
  • 超时获取锁

3、使用

public class Sequence {
	private int value  ;
	Lock lock = new ReentrantLock();
	
	public  int getNext() {
		//lock放在这里是锁不住的,所有线程得共用一把锁才锁的住,所有锁得放外边
		//Lock lock = new ReentrantLock();
		lock.lock();//获取锁
		int a = value++;
		lock.unlock();//释放锁
		return a;
	}

	public static void main(String[] args) {
		Sequence sequence = new Sequence();
		//第一个线程
		new Thread(new Runnable() {
			@Override
			public void run() {
				while(true) {
					System.out.println(Thread.currentThread().getName()+"      ----->"+sequence.getNext());
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}).start();
		//第二个线程
		new Thread(new Runnable() {
			@Override
			public void run() {
				while(true) {
					System.out.println(Thread.currentThread().getName()+"      ----->"+sequence.getNext());
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}).start();
		//第三个线程
		new Thread(new Runnable() {
			@Override
			public void run() {
				while(true) {
					System.out.println(Thread.currentThread().getName()+"      ----->"+sequence.getNext());
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}).start();
	}
}

相关文章:

  • 2021-06-01
  • 2021-10-01
  • 2022-12-23
  • 2021-06-27
  • 2021-12-19
猜你喜欢
  • 2021-10-22
  • 2021-10-15
  • 2022-12-23
  • 2022-01-05
  • 2021-06-13
  • 2021-08-28
  • 2022-12-23
相关资源
相似解决方案