• Lock锁


    Lock锁

    概念

    • 线程同步机制——通过显式定义同步锁对对象来实现同步
    • ReentrantLock实现了Lock,拥有与synchronized相同的并发性和内存语义。

    synchronized的缺陷

    • 如果获取锁的线程需要等待或调用了sleep()方法被阻塞了,synchronized不会释放锁,于是其他线程只能等待
    • 有时候的行为并不会造成冲突,比如读和读操作,但synchronized来实现的同步却会拒绝这些操作。
    • 另外Lock可以知道线程有没有得到锁,synchronized不能

    Lock和synchronized的区别

    • Lock是一个接口,synchronized是关键字
    • synchronized会自动释放锁,Lock需要手动释放
    • Lock可以让等待的线程响应中断,synchronized不会,所以线程会一直等待下去
    • Lock可以知道线程有没有拿到锁
    • Lock只能锁住块范围,synchronized可以锁住块,方法,类。

    测试代码

    import java.util.concurrent.locks.ReentrantLock;
    
    /**
     * 测试Lock锁
     */
    
    public class TestLock implements Runnable{
    
        int ticket = 10;
        final ReentrantLock lock = new ReentrantLock();
        @Override
        public void run() {
    
            while (true){
                try {
                    lock.lock();
                    if(ticket > 0) {
                        try {
                            System.out.println(Thread.currentThread().getName() + "-->" + ticket--);
                            Thread.sleep(100);
                        }catch (Exception e){
                        }
                    }
                    else {
                        break;
                    }
                }finally {
                    lock.unlock();
                }
    
            }
    
        }
    
        public static void main(String[] args) {
    
            TestLock t1 = new TestLock();
    
            new Thread(t1).start();
            new Thread(t1).start();
            new Thread(t1).start();
    
        }
    
    }
    
    因为我喜欢追寻过程中的自己
  • 相关阅读:
    Rman备份及不完全恢复操作
    win2003系统同步Linux ntp server批处理
    ntp服务器搭建
    notepad++调用python3中文乱码
    10G安装DataGuard
    oracle安装配置
    python之路(14)进程
    python之路(13)线程
    python之路(12)网络编程
    python之路(11)描述符
  • 原文地址:https://www.cnblogs.com/IzuruKamuku/p/14359788.html
Copyright © 2020-2023  润新知