并发编程:并发测试:监测Lock接口

it2026-04-17  1

 

目录

监测Lock(ReentrantLock)

一、主程序

二、拓展ReentrantLock

三、使用锁的任务

四、执行结果


监测Lock(ReentrantLock)

getOwner():持锁线程。getQueuedThreads():等待锁的线程列表。hasQueuedThreads():  是否有等待锁的线程。getQueueLength(): 等待锁的线程数量。isLocked(): 是否有线程持有锁。isFair(): 是否公平锁

一、主程序

package xyz.jangle.thread.test.n9_2.testlock; import java.util.concurrent.TimeUnit; /** * 9.2、监测Lock接口 * * @author jangle * @email jangle@jangle.xyz * @time 2020年10月21日 下午9:20:12 * */ public class M { public static void main(String[] args) throws Exception { var lock = new MyLock(); Thread threads[] = new Thread[5]; for (int i = 0; i < 5; i++) { var task = new Task(lock); threads[i] = new Thread(task); threads[i].start(); } for (int i = 0; i < 15; i++) { System.out.println("M:Log :**********"); System.out.println("Lock:Owner:"+lock.getOwnerName()); if(lock.hasQueuedThreads()) { System.out.print("Lock:排队中的线程:"+lock.getQueueLength()+"个 :"); var lockedThreads = lock.getThreads(); for (Thread thread : lockedThreads) { System.out.print(thread.getName()+" | "); } } System.out.println("\n Lock:fairness(是否公平锁):"+lock.isFair()+"、Locked(锁状态):"+lock.isLocked()); TimeUnit.SECONDS.sleep(1); } } }

二、拓展ReentrantLock

package xyz.jangle.thread.test.n9_2.testlock; import java.util.Collection; import java.util.concurrent.locks.ReentrantLock; /** * @author jangle * @email jangle@jangle.xyz * @time 2020年10月21日 下午9:22:34 * */ @SuppressWarnings("serial") public class MyLock extends ReentrantLock { /** * * 获取当前持锁线程名称 * @return */ public String getOwnerName() { if(this.getOwner() == null) { return "None"; } return this.getOwner().getName(); } /** * * 获取当前线程队列 * @return */ public Collection<Thread> getThreads() { return this.getQueuedThreads(); } }

三、使用锁的任务

package xyz.jangle.thread.test.n9_2.testlock; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; /** * @author jangle * @email jangle@jangle.xyz * @time 2020年10月21日 下午9:29:11 * */ public class Task implements Runnable { private final Lock lock; public Task(Lock lock) { super(); this.lock = lock; } @Override public void run() { for (int i = 0; i < 5; i++) { lock.lock(); System.out.println(Thread.currentThread().getName() + ":获取了当前锁"); try { TimeUnit.MILLISECONDS.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } } }

四、执行结果

M:Log :********** Lock:Owner:None Thread-2:获取了当前锁 Lock:fairness(是否公平锁):false、Locked(锁状态):true Thread-2:获取了当前锁 M:Log :********** Thread-2:获取了当前锁 Lock:Owner:Thread-2 Lock:排队中的线程:4个 :Thread-1 | Thread-3 | Thread-0 | Thread-4 | Lock:fairness(是否公平锁):false、Locked(锁状态):true Thread-2:获取了当前锁 Thread-2:获取了当前锁 M:Log :********** Lock:Owner:Thread-2 Lock:排队中的线程:4个 :Thread-1 | Thread-3 | Thread-0 | Thread-4 | Lock:fairness(是否公平锁):false、Locked(锁状态):true Thread-4:获取了当前锁 M:Log :********** Lock:Owner:Thread-4 Lock:排队中的线程:3个 :Thread-4:获取了当前锁 Thread-1 | Thread-3 | Thread-0 | Lock:fairness(是否公平锁):false、Locked(锁状态):true Thread-4:获取了当前锁 M:Log :********** Thread-4:获取了当前锁 Lock:Owner:Thread-4 Lock:排队中的线程:3个 :Thread-1 | Thread-3 | Thread-0 | Lock:fairness(是否公平锁):false、Locked(锁状态):true Thread-4:获取了当前锁 M:Log :********** Lock:Owner:Thread-0 Lock:排队中的线程:2个 :Thread-0:获取了当前锁 Thread-1 | Thread-3 | Lock:fairness(是否公平锁):false、Locked(锁状态):true Thread-0:获取了当前锁 M:Log :********** Thread-0:获取了当前锁 Lock:Owner:Thread-0 Lock:排队中的线程:2个 :Thread-1 | Thread-3 | Lock:fairness(是否公平锁):false、Locked(锁状态):true Thread-0:获取了当前锁 M:Log :********** Lock:Owner:Thread-0 Lock:排队中的线程:2个 :Thread-0:获取了当前锁 Thread-1 | Thread-3 | Lock:fairness(是否公平锁):false、Locked(锁状态):true Thread-3:获取了当前锁 M:Log :********** Lock:Owner:Thread-3 Lock:排队中的线程:1个 :Thread-1 | Lock:fairness(是否公平锁):false、Locked(锁状态):true Thread-3:获取了当前锁 Thread-3:获取了当前锁 M:Log :********** Lock:Owner:Thread-3 Lock:排队中的线程:1个 :Thread-1 | Lock:fairness(是否公平锁):false、Locked(锁状态):true Thread-3:获取了当前锁 Thread-3:获取了当前锁 M:Log :********** Lock:Owner:Thread-3 Lock:排队中的线程:1个 :Thread-1 | Lock:fairness(是否公平锁):false、Locked(锁状态):true Thread-1:获取了当前锁 Thread-1:获取了当前锁 M:Log :********** Lock:Owner:Thread-1 Lock:fairness(是否公平锁):false、Locked(锁状态):true Thread-1:获取了当前锁 Thread-1:获取了当前锁 M:Log :********** Lock:Owner:Thread-1 Lock:fairness(是否公平锁):false、Locked(锁状态):true Thread-1:获取了当前锁 M:Log :********** Lock:Owner:None Lock:fairness(是否公平锁):false、Locked(锁状态):false M:Log :********** Lock:Owner:None Lock:fairness(是否公平锁):false、Locked(锁状态):false

 

最新回复(0)