实例讲解Java并发编程之变量

 更新时间:2015年04月13日 10:57:10   投稿:junjie  
这篇文章主要介绍了实例讲解Java并发编程之变量,本文讲解了编写线程安全需要关心的共享变量和可变变量,需要的朋友可以参考下

编写线程安全需要关心的:

1.共享的变量
2.可变的变量

共享意味着多个线程可以同时访问,可变意味着其值在生命周期可以改变。
例如以下count 变量:

复制代码 代码如下:

//线程不安全的类
public class UnsafeCount {
    private int count = 0;    //该变量是共享的
    public void increase() {    //这里没有同步机制,多个线程可以同时访问
        count++;    //该变量是可变的
    }
    public int getCount() {
        return count;
    }
}

有4种方式可以修复这个问题:

1.不在线程中共享该状态变量,可以将变量封装到方法中(无状态的对象一定是线程安全的);因为方法中变量是每个线程独占的,不和其它线程共享。比如:

复制代码 代码如下:

public int add(int count){
return ++count;//这里也可以说无状态的对象一定是线程安全的
}

2.将状态变量修改为不可变的变量。
复制代码 代码如下:

private final  int count = 0;

3.在访问状态变量使用同步策略。
复制代码 代码如下:

public synchronized  void increase() {
count++;
}

4.使用原子变量类。
复制代码 代码如下:

 private AtomicInteger count;
 public void increase() {
  count.getAndAdd(1);
 }

相关文章

  • mybatis注解开发 一对多嵌套查询方式

    mybatis注解开发 一对多嵌套查询方式

    这篇文章主要介绍了mybatis注解开发 一对多嵌套查询方式,具有很好的参考价值,希望对大家有所帮助。
    2023-03-03
  • Java如何求交集、并集、差集

    Java如何求交集、并集、差集

    这篇文章主要介绍了Java如何求交集、并集、差集问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 一篇文章带你了解JavaSE的数据类型

    一篇文章带你了解JavaSE的数据类型

    这篇文章主要给大家介绍了关于JavaSE的数据类型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2021-09-09
  • SpringBoot Web详解静态资源规则与定制化处理

    SpringBoot Web详解静态资源规则与定制化处理

    这篇文章主要介绍了SpringBoot web场景的静态资源规则与定制化,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-06-06
  • 解答为什么 Java 线程没有Running状态

    解答为什么 Java 线程没有Running状态

    Java 线程没有Running状态指的是一个在 JVM 中执行 的线程处于的状态,本文小编将为大家详解一二,需要的朋友可以参考下面文章具体内容
    2021-09-09
  • springboot整合mongodb并实现crud步骤详解

    springboot整合mongodb并实现crud步骤详解

    这篇文章主要介绍了springboot整合mongodb并实现crud,本文分步骤通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • SpringBoot如何实现接口版本控制

    SpringBoot如何实现接口版本控制

    这篇文章主要介绍了SpringBoot如何实现接口版本控制,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java中的线程生命周期核心概念

    Java中的线程生命周期核心概念

    这篇文章主要介绍了Java中的线程生命周期核心概念,通过使用一个快速的图解展开文章内容,需要的小伙伴可以参考一下
    2022-06-06
  • 使用java实现“钉钉微应用免登进入某H5系统首页“功能”

    使用java实现“钉钉微应用免登进入某H5系统首页“功能”

    这篇文章主要介绍了用java实现“钉钉微应用,免登进入某H5系统首页“功能”,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • Java 滑动窗口最大值的实现

    Java 滑动窗口最大值的实现

    这篇文章主要介绍了Java 滑动窗口最大值,给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。感兴趣的可以了解一下
    2021-05-05

最新评论