原文:https://www.cnblogs.com/lixinjie/p/10817860.html,讲得很通俗易懂。

 

我从文中学到的几点(线程安全方面):

  在多线程环境中,存在于堆内存的公共资源可以被很多线程访问,也就存在安全隐患(数据容易被修改)。

  所以,为了保障数据的安全,就要对这些数据做些处理。

 

一、从变量上着手:

方法一:将变量放在方法中,也就是局部变量【操作系统会为每个线程分配属于它自己的内存空间,通常称为栈内存,其它线程无权访问,而局部变量在栈内存中】

double avgScore(double[] scores) {
    double sum = 0;
    for (double score : scores) {
        sum += score;
    }
    int count = scores.length;
    double avg = sum / count;
    return avg;
}

方法二:变量在类中的方法外 ,即成员变量,这时可以利用ThreadLocal【原理:多个线程访问同一共享变量时,ThreadLocal类为每个线程提供一份该变量的副本,各个线程拥有一份属于自己的变量副本,操作修改的是各自的变量副本,而不会相互影响。】

class StudentAssistant {

    ThreadLocal<String> realName = new ThreadLocal<>();
    ThreadLocal<Double> totalScore = new ThreadLocal<>();

    String determineDegree() {
        double score = totalScore.get();
        if (score >= 90) {
            return "A";
        }
        if (score >= 80) {
            return "B";
        }
        if (score >= 70) {
            return "C";
        }
        if (score >= 60) {
            return "D";
        }
        return "E";
    }

    double determineOptionalcourseScore() {
        double score = totalScore.get();
        if (score >= 90) {
            return 10;
        }
        if (score >= 80) {
            return 20;
        }
        if (score >= 70) {
            return 30;
        }
        if (score >= 60) {
            return 40;
        }
        return 60;
    }
}
View Code

相关文章:

  • 2022-12-23
  • 2021-05-05
  • 2022-12-23
  • 2022-12-23
  • 2022-02-04
  • 2021-06-07
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-02
  • 2021-10-20
  • 2022-12-23
  • 2022-01-15
  • 2022-12-23
  • 2021-06-04
相关资源
相似解决方案