TypechoJoeTheme

Clover 的博客

统计
登录
用户名
密码
/
注册
用户名
邮箱

CloverYou

日出于东却落于西,相识人海却散于席。

关于synchronized无法锁住Integer

2022-01-02
/
0 评论
/
25 阅读
/
正在检测是否收录...
01/02

原因

在多线程的时候,为了保证数据安全,必须在修改数据时使用线程同步,java中的synchronized用来实现线程同步、线程列队。

学完多线程基础的我,写一个多线程交替输出1,2,3,4,5...,一个线程负责输出偶数,一个线程负责输出奇数,由于这个数是整数,在java中int又是基本数据类型,基本数据类型并不是共享的,也就是基础数据类型是在栈中申明,java提供了一个Integer包装类,使用的时候发现根本锁不住这个对象。

回忆之前对Integer的知识:为了提高程序效率,Integer在类加载时就已经创建了-128到127的对象

嗯!!!!如果我对这个对象进行运算的话!内存地址是不是也不一样?(细思极恐)

System.out.println(num++;)

粗暴解决方案

建一个加锁类(人工造锁),将需要用到的运算什么的加进去,嗯简单粗暴!!!!

class IntegerLock {
  private Integer num = 0;

  public Integer getNum() {
    return num;
  }

  public void setNum(Integer num) {
    this.num = num;
  }

  public Integer remainder(Integer o) {
    return num % o;
  }

  public void plus(Integer o) {
    num = num + o;
  }

  @Override
  public String toString() {
    return num.toString();
  }
}

JAVA随笔
朗读
赞(0)
版权属于:

Clover 的博客

本文链接:

https://www.ctong.top/index.php/archives/70/(转载时请注明本文出处及文章链接)

评论 (0)
CloverYou
日出于东却落于西,相识人海却散于席。
88 文章数
11 评论量
IP信息

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

最新回复

  1. 缓存一致性 - 点击领取
    2022-01-06
  2. 宝宝
    2022-01-02

标签云