我想创建公平锁,以便每个线程一个接一个地获得锁,而不管优先级如何。
import java.util.concurrent.locks.ReentrantLock;
public class StarvationRunnable implements Runnable {
private ReentrantLock lock = new ReentrantLock(true);
public void doLongTask() {
lock.lock();
// to imitate long running task in critical section
for (int i = 0; i < 1000000000; i++)
;
System.out.println(Thread.currentThread().getName() + " is running with priority "
+ Thread.currentThread().getPriority() + " !");
lock.unlock();
}
@Override
public void run() {
for (;;) {
doLongTask();
}
}
public static void main(String[] args) {
StarvationRunnable runnable = new StarvationRunnable();
for (int i = 0; i < 4; i++) {
Thread thread = new Thread(runnable);
thread.setPriority(i == 3 ? Thread.MIN_PRIORITY : Thread.MAX_PRIORITY);
thread.start();
}
}
}
所以我有4个线程。3 具有最高优先级,1 具有最低优先级。我通过创建公平锁
new ReentrantLock(true);
当我运行这个演示时,它不会让具有最小优先级的线程执行与具有最大优先级的线程一样多的执行次数。但我认为公平锁就是为了这个。
如何正确使用公平锁?