杨凯
2023-10-18 31fbee8d73fbdc8e2331208d69f674f9b29246ca
同一个仓库下的同一个型号上锁,不同仓库、不同型号不受影响
1个文件已添加
2个文件已修改
63 ■■■■■ 已修改文件
consum-base/src/main/java/com/consum/base/core/WarehouseBusinessService.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/core/WarehouseCoreService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
deploy-jar-single/src/main/java/com/consum/test/synchronizedCode.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/core/WarehouseBusinessService.java
@@ -4,7 +4,6 @@
import com.consum.base.core.tools.SuperMap;
import com.consum.base.core.util.DateUtil;
import com.consum.model.po.*;
import com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer;
import com.walker.infrastructure.utils.NumberGenerator;
import com.walker.jdbc.service.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
@@ -565,4 +564,12 @@
        insertBatch(warningList);
    }
    /**
     * 部门物品分发
     */
    public void doDepLending(){
    }
}
consum-base/src/main/java/com/consum/base/core/WarehouseCoreService.java
@@ -41,7 +41,13 @@
            Assert.notNull(param, "wareHouse param can not null !");
            Assert.notNull(param.getWarehouseId(), "wareHouse id can not null");
            List<CheckWarehouseResult> results;
            synchronized (param.getWarehouseId()) {
            String key = param.getWarehouseId().toString() + param.getModelId().toString();
            /**
             * 此处将同一个仓库下的同一个型号上锁,不同仓库、不同型号不受影响。
             */
            synchronized (key) {
                if (param.getIsCheckIn()) {
                    results = new ArrayList<>();
                    results.add(checkin(param));
deploy-jar-single/src/main/java/com/consum/test/synchronizedCode.java
New file
@@ -0,0 +1,46 @@
package com.consum.test;
/**
 * 测试多线程并发
 */
public class synchronizedCode implements Runnable {
    static synchronizedCode instance = new synchronizedCode();
    static int i = 0;
    static String key = "1";
    public static void main(String[] args) throws InterruptedException {
        for (int j=0;j<3;j++){
            Thread t1 = new Thread(instance);
            t1.start();
        }
        System.out.println("线程执行结束");
    }
    @Override
    public void run() {
        String myKey;
        if (key == "1"){
            myKey = "def";
            key = "2";
        } else {
            myKey = "abc";
        }
        System.out.println(Thread.currentThread().getName() + ":" + myKey);
        synchronized (myKey){
            System.out.println(Thread.currentThread().getName() + "开始运行");
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println("我叫"+ Thread.currentThread().getName()+"运行结束");
        }
    }
}