多线程-JDK5之后的Lock锁的概述和使用

来源:互联网 发布:5g网络相关的股票 编辑:程序博客网 时间:2024/05/16 15:08
package cn.itcast_01;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class SellTicket implements Runnable {// 定义票private int tickets = 100;// 定义锁对象private Lock lock = new ReentrantLock();@Overridepublic void run() {while (true) {try {// 加锁lock.lock();if (tickets > 0) {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + "正在出售第" + (tickets--) + "张票");}} finally {// 释放锁lock.unlock();}}}}

package cn.itcast_01;/* * 虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁, * 为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock。 *  * Lock: * void lock(): 获取锁。 * void unlock():释放锁。   * ReentrantLock是Lock的实现类. */public class SellTicketDemo {public static void main(String[] args) {// 创建资源对象SellTicket st = new SellTicket();// 创建三个窗口Thread t1 = new Thread(st, "窗口1");Thread t2 = new Thread(st, "窗口2");Thread t3 = new Thread(st, "窗口3");// 启动线程t1.start();t2.start();t3.start();}}

原创粉丝点击