解决线程安全问题_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这个枚举中给出了六种线程状态︰