java基础——lock同步锁

Posted zsbenn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础——lock同步锁相关的知识,希望对你有一定的参考价值。

package lock;

/*
方式三:
    Lock锁
synchronized和lock的不同
1.sychronized在执行完相应代码块以后属于自动释放同步监视器,lock需要手动启动同步
建议优先使用lock->同步方法块->同步方法(在方法体之外)

实现Runnable对象被三个线程调用,然后这个对象的run方法里贡献资源操作器被lock上锁了

@author zsben
@create 2020-01-03 23:55
*/

import java.util.concurrent.locks.ReentrantLock;

class Window implements Runnable{

    private int ticket = 100;

    //1.实例化lock
    private ReentrantLock lock = new ReentrantLock(true);//fair=true:公平锁,线程先来后到

    @Override
    public void run() {
        while(true){
            try{
                //2.调用lock方法
                lock.lock();

                if(ticket>0){

                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    System.out.println(Thread.currentThread().getName()+": "+ticket);
                    ticket--;
                }else break;
            }
            finally {
                //3.调用解锁方法
                lock.unlock();
            }
        }
    }
}

public class LockTest {

    public static void main(String[] args) {
        Window w = new Window();

        Thread t1 = new Thread(w);
        Thread t2 = new Thread(w);
        Thread t3 = new Thread(w);

        t1.start();
        t2.start();
        t3.start();

    }
}

以上是关于java基础——lock同步锁的主要内容,如果未能解决你的问题,请参考以下文章

java基础--25.多线程的改进--Lock显式地加锁和释放锁

Java多线程——Lock&Condition

java并发线程锁技术的使用

并发包java.util.concurrent.locks.Lock

Java基础学习第二十五天——多线程学习总结

Java同步锁——lock与synchronized 的区别转