前言
在软件编程中,多线程是个绕不开的话题。多线程的使用,能够提高程序的运行效率,但也带来新的问题:如何保证下面的线程安全呢?
无状态
例如:
public class Test {
public void threadMethod(int j) {
int i = 1;
j = j + i;
}
这个例子中,不存在全局变量,所以不存在线程安全问题。
官方解释:局部变量作用域仅限于函数内部, 离开该函数的内部就是无效的。
不可变
例如:
public class Test {
public static final String DEFAULT_NAME = "abc";
}
这个例子中,全局变量被final修饰,所以不存在线程安全问题。
官方解释:final被修饰的变量为常量一旦赋值不能修改,被修改的方法为最终方法不能被重写,被修饰的类是最终类,不能被继承。
无修改权限
例如:
public class Test {
private String name;
public String getName() {
return name;
}
}
这个例子中,没有对外暴露修改name字段的入口,所以不存在线程安全问题。
官方解释:
-
public 表示共有:类的数据成员和函数可以被该类对象和派生类访问。
-
private 私有型:自己的类可以访问,但派生类不能访问。
-
protected 保护型:自身类和派生类可以访问相当于自身的private型成员,它同private的区别就是在对待派生类的区别上。
synchronized
例如:
public class Test {
private int age = 18;
public synchronized int getAge1(int i) {
age = age + i;
return age;
}
public int getAge2(int i) {
synchronized(this){