单列模式导致线程不安全引起的数据污染

问题:接口调用时,返回的数据有时会包含上一次调用接口的数据。

我的代码:

@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("Result响应")
public class Result implements Serializable {
    @ApiModelProperty(value="编码 200:成功 其他值代表失败")
    private Integer code;
    @ApiModelProperty(value="消息内容")
    private Object data;
    @ApiModelProperty(value="响应数据")
    private String msg;

    //问题在这
    static Result result = new Result();

    public Result ok(Object data){
        result.setCode(200);
        result.setData(data);
        result.setMsg("SUCCESS");
        return result;
    }

    public Result ok(){
        result.setCode(200);
        result.setMsg("SUCCESS");
        return result;
    }

    public Result err(Integer code, String msg){
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }

    public Result err(Integer code){
        result.setCode(code);
        result.setMsg("ERROR");
        return result;
    }
}

原因:在返回类中是使用了单列模式,导致了线程不安全。

线程安全定义:线程安全一般指在多线程情况下,一段代码或者某个对象可以正确地应对多线程访问,不会导致数据丢失,错乱等不一致问题。

解决方式

       一,不使用单列模式

        二,加synchronized(但是这个对于我的问题显然不太现实)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值