Lock锁-线程状态概述
Lock锁
java.util.concurrent.locks.Lock机制提供了比synchronized代码块和synchronized方法更广泛的锁定操作,同步代码块/同步方法具有的功能Lock都有,除此之外更强大,更体现面向对象。
Lock锁也称同步锁,加锁与释放锁方法化了,如下:
- public void lock():加同步锁。
- public void unlock():释放同步锁。
使用如下:
//在成员位置创建一个Reetrantlock对象 static Lock l = new ReentrantLock();
public void run() { //使用死循环,让卖票操作重复执行 while(true){ l.lock(); payTicket(); } } // 定义一个同步方法 public static void payTicket() { synchronized (RunnableImpl.class) { //先判断票是否存在 if (ticket > 0) { //提高安全问题出现的概率,让程序睡眠 try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } //票存在,卖票 ticket-- System.out.println(Thread.currentThread().getName() + "正在卖第" + ticket + "张票"); ticket--; } l.unlock(); }
线程状态概述
当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,有几种状态呢?在API中 java.lang.Thread.state这个枚举中给出了六种线程状态︰
这里先列出各个线程状态发生的条件,下面将会对每种状态进行详细解析