0
点赞
收藏
分享

微信扫一扫

站在API角度再看同步锁

王传学 2022-02-12 阅读 11

静态锁对象

/**
 * @Description: 锁
 * @Author: 小马
 * @Date: 2022/2/12 20:35
 */
public class ThreadLock {
    public static Object  obj= new Object();
}

API

/**
 * @Description: API
 * @Author: 小马
 * @Date: 2022/2/12 20:37
 */
@RequestMapping("/thread")
@RestController

public class ThreadController {

    @GetMapping("carAccess")
    public String carAccess(@RequestParam("carNumber") String carNumber) throws InterruptedException {
        System.out.println("车牌号{"+carNumber+"}正在排队");
        synchronized (ThreadLock.obj){
            ThreadLock.obj.wait();
        }
        System.out.println("车牌号{"+carNumber+"}已经驶离缴费站");
        return null;
    }
    @GetMapping("carNotify")
    public String notifyCar(){
        synchronized (ThreadLock.obj){
            ThreadLock.obj.notify();
        }
        return null;
    }
    @GetMapping("carNotifyAll")
    public String NotifyAllCar(){
        synchronized (ThreadLock.obj){
            ThreadLock.obj.notifyAll();
        }
        return null;
    }
}

实验1:请求三次carAccess且携带不同参数,然后请求notify接口

###
GET http://localhost:8888/thread/carAccess?carNumber=001
###
GET http://localhost:8888/thread/carAccess?carNumber=002
###
GET http://localhost:8888/thread/carAccess?carNumber=003

在这里插入图片描述

###
GET http://localhost:8888/thread/carNotify

发现请求一次,释放一把锁且安装按照顺序释放锁
在这里插入图片描述

实验2:请求三次carAccess且携带不同参数,然后请求notifyAll接口在这里插入图片描述

###
GET http://localhost:8888/thread/carNotifyAll

发现一次性释放三把锁且锁的释放顺序有一定的随机性
在这里插入图片描述

举报

相关推荐

0 条评论