解决线程安全问题_Lock锁,线程状态概述

解决线程安全问题_Lock锁:

解决线程安全问题的三种方案:使用Lock锁

java.utiL.concurrent.Locks.Lock接口

lock_实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作。

Lock接口中的方法:

void Lock()获取锁。

void unLock()释放锁。

java.utiL.concurrent.Locks.ReentrantLock impLements Lock接口

使用步骤:

1.在成员位置创建一个ReentrantLock对象

2.在可能会出现安全问题的代码前调用Lock接口中的方法Lock获取锁

3.在可能会出现安全问题的代码后调用L ock接口中的方法unLock释放锁

public class suo implements Runnable{
    private int tickets =100;

    Lock lock = new ReentrantLock();
    /**
     * 执行卖票操作
     */
    @Override
    public void run() {
        //每个窗口卖票的操作
        //窗口 永远开启
        while (true){
            lock.lock();
            if (tickets>0){//有票  可以卖
                //出票操作
                //使用sleep模拟一下出票时间
                try {
                    Thread.sleep(50);
                }catch (InterruptedException e){
                    //  TODO Auto-generated catch block
                    e.printStackTrace();
                }
                //获取当前线程对象的名字
                String name = Thread.currentThread().getName();
                System.out.println(name+"正在卖:"+tickets--);
            }
            lock.unlock();
        }
    }
}

 

 

 

 

线程状态概述:

当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。

在线程的生命周期中,有几种状态呢﹖在API中java.lang. Thread.state这个枚举中给出了六种线程状态︰

 

 

posted @ 2022-07-08 10:20  冰灵IT  阅读(92)  评论(0)    收藏  举报