用synchronized模仿公平锁
前言
由于无法指定启动顺序以及存在的指令优化问题,所以深究起来还是有BUG,所以理解为主
一、普通锁的队列
1.代码
/**
* @author :spj
* @Date:2022/5/13
* @description:普通锁
*/
@SuppressWarnings("all")
public class Demo implements Runnable {
public static void main(String[] args) throws InterruptedException {
//创建三个基于Runnable接口的线程
Demo demo = new Demo();
Thread A = new Thread(demo, "A");
Thread B = new Thread(demo, "B");
Thread C = new Thread(demo, "C");
A.start();
B.start();
C.start();
//等待一秒等待线程执行完毕
Thread.sleep(1000);
//查看各线程执行结果
System.out.println(demo.countA);
System.out.println(demo.countB);
System.out.println(demo.countC);
}
//对执行总次数进行限定
int nums = 1000;
//记录每个线程的执行次数
int countA = 0;
int countB = 0;
int countC = 0;
//手动限定线程的名字
String A = "A";
String B = "B";
String C = "C";
String threadName;
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
synchronized (Demo.class) {
threadName=Thread.currentThread().getName();
if (nums > 0) {
nums--;