springboot多线程安全demo

下面例子是线程安不安全实例

复制代码
import com.vip.vman.client.zk.ZkLock;
import com.vip.vman.result.BasicResult;
import com.vip.vman.service.job.ZKJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.TimeUnit;

@Slf4j
@RestController
@RequestMapping(value = "/vman/sys2")
public class System2Controller {

    @Autowired
    ZKJob zkJob;
    private volatile  Integer value = 0;

    //这个是线程不安全的,即使变量设置了volatile
    @RequestMapping(value = "/cacheClean3", method = RequestMethod.GET)
    public  BasicResult expireRedis3(){
        BasicResult<Integer> basicResult = new BasicResult<>();
        value++;
        basicResult.setSingleResult(value);
        return basicResult;
    }

    //因为加了synchronized,所以线程安全。这个只能针对单实例安全,但是多实例并也不安全
    @RequestMapping(value = "/cacheClean4", method = RequestMethod.GET)
    public synchronized BasicResult expireRedis4(){
        BasicResult<Integer> basicResult = new BasicResult<>();
        //证
        value++;
        basicResult.setSingleResult(value);
        return basicResult;
    }

    @RequestMapping(value = "/cacheClean5", method = RequestMethod.GET)
    public  BasicResult expireRedis5() throws Exception {
        BasicResult<Integer> basicResult = new BasicResult<>();
        ZkLock lock = new ZkLock(zkJob.getZK(), "/vman/analyse_task_delete/lock2");
        try {
            if( lock.acquire(20, TimeUnit.SECONDS) ) {
                value++;
            }
        }catch (Exception e) {
            log.info("exception:{}",e);
        }finally {
            lock.release();
        }
        basicResult.setSingleResult(value);
        return basicResult;
    }
}
相关推荐
慕木兮人可21 分钟前
Docker部署MySQL镜像
spring boot·后端·mysql·docker·ecs服务器
电池保护板测试仪厂家30 分钟前
电池充放电容量检测:守护电动出行设备动力核心的安全防线
科技·安全·能源·制造·零售·交通物流
程序员的世界你不懂40 分钟前
基于Java+Maven+Testng+Selenium+Log4j+Allure+Jenkins搭建一个WebUI自动化框架(4)集成Allure报表
java·selenium·maven
isNotNullX1 小时前
数据中台架构解析:湖仓一体的实战设计
java·大数据·数据库·架构·spark
皮皮林5511 小时前
“RPC好,还是RESTful好?”,这个问题不简单
java
Xiaouuuuua1 小时前
一个简单的脚本,让pdf开启夜间模式
java·前端·pdf
深盾科技2 小时前
.NET 安全之 JIT 保护技术深度解析
安全·.net
车车不吃香菇2 小时前
java idea 本地debug linux服务
java·linux·intellij-idea
浩瀚星辰20243 小时前
图论基础算法:DFS、BFS、并查集与拓扑排序的Java实现
java·算法·深度优先·图论
LjQ20403 小时前
Java的一课一得
java·开发语言·后端·web