大家好,我是walker
一个从文科自学转行的程序员~
爱好编程,偶尔写写编程文章和生活
欢迎关注公众号【I am Walker】,回复“电子书”,就可以获得200多本编程相关电子书哈~
我的gitee:https://gitee.com/shen-chuhao/walker.git 里面很多技术案例!
简介
lock不同于synchronized,是可以实现公平锁和非公平锁的
public ReentrantLock(boolean fair)
- 当fair为true的时候,是公平锁
- false的时候为非公平锁
如果是公平锁,则会按照队列的顺序进行执行
如果是非公平锁,则会按优先级高的先执行
案例:
公平锁
package lockTest;
import java.util.concurrent.locks.ReentrantLock;
public class FairLockTest {
//公平锁
static ReentrantLock lock=new ReentrantLock(true);
public static void main(String[] args) {
new Thread(()->{
//设置优先级 1-最低 10-最高
Thread.currentThread().setPriority(1);
lock.lock();
System.out.println(Thread.currentThread().getName()+"执行");
lock.unlock();
},"线程A").start();
new Thread(()->{
//设置优先级 1-最低 10-最高
Thread.currentThread().setPriority(10);
lock.lock();
System.out.println(Thread.currentThread().getName()+"执行");
lock.unlock();
},"线程B").start();
}
/**
* 执行结果:
* 线程A执行
* 线程B执行
*/
}
非公平锁
package lockTest;
import java.util.concurrent.locks.ReentrantLock;
public class NotFairLockTest {
//不公平锁
static ReentrantLock lock=new ReentrantLock(false);
public static void main(String[] args) {
new Thread(()->{
Thread.currentThread().setPriority(1);
lock.lock();
System.out.println(Thread.currentThread().getName()+"执行");
lock.unlock();
},"线程A").start();
new Thread(()->{
Thread.currentThread().setPriority(10);
lock.lock();
System.out.println(Thread.currentThread().getName()+"执行");
lock.unlock();
},"线程B").start();
/**
*执行结果:
* 线程B执行
* 线程A执行
*/
}
}