解决线程安全------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.利弊
同步的方式,解决了线程的安全问题。---好处
操作同步代码时,只能一个线程参与,其他线程等待。相当于是一个单线程的过程,效率低。

 

posted @ 2020-08-06 21:09  lixia64  阅读(80)  评论(0编辑  收藏  举报