• 解决线程安全------lock锁


    方式三:Lock锁 --- JDK5.0新增
    *

    同步锁使用Lock对象充当

    ReentrantLock类实现了Lock

    新建的ReentrantLock对象,括号里true表示线程有着先后次序,先进先出。不写则默认为false

    package main.java.ThreadRunnable;
    
    import java.util.concurrent.locks.ReentrantLock;
    
    /**
     * @Author lx
     * @Description    lock锁
     * @Date 14:59 2020/8/4
     * @Version
     */
    
    class windows implements Runnable{
    
        private int ticket =100;
    
        private ReentrantLock lock = new ReentrantLock(true); //新建RenntrantLock
    
        @Override
        public void run() {
            while (true){
                try {
                    lock.lock();       //lock锁
                    if (ticket>0){
                        System.out.println(Thread.currentThread().getName()+":"+ticket);
                        ticket--;
                    }else
                        break;
                }finally {
                    lock.unlock();      //手动解锁
                }
    
            }
        }
    }
    
    
    public class windowRunnable {
        public static void main(String[] args) {
            windows windows = new windows();
            Thread t1 = new Thread(windows);
            Thread t2 = new Thread(windows);
            t1.setName("窗口一:");
            t2.setName("窗口二:");
            t1.start();
            t2.start();
        }
    }

    使用的优先顺序:
    * Lock ---> 同步代码块(已经进入了方法体,分配了相应资源 ) ---> 同步方法(在方法体之外)
    3.利弊
    同步的方式,解决了线程的安全问题。---好处
    操作同步代码时,只能一个线程参与,其他线程等待。相当于是一个单线程的过程,效率低。

  • 相关阅读:
    自定义事件 Event 、CustomEvent的使用
    移动端适配方案总结
    @media screen媒体查询实现页面自适应布局
    判断页面所有图片加载完成后执行操作
    JQ选择器篇2
    JQ 选择器篇1
    sql 日期转换字符大法
    SQL server从入门精通----3种分页
    SQL server从入门精通----触发器
    SQL server从入门精通---- 事务
  • 原文地址:https://www.cnblogs.com/lixia0604/p/13449024.html
Copyright © 2020-2023  润新知