我对多线程的了解越多,方法的复杂性就越高。这是一个讨论了很多次的主题,但是没有一篇文章提供明确的结论。字符串是不可变的,意味着您不能更改字符串对象的值,但是可以将引用指向新对象。但是,这对线程安全性有何帮助?下面是我创建的测试类,以找到答案。输出不一致;有时是“ java春季”和“ java春季”。 这不是因为代码不是线程安全的而发生的吗?这是预期的行为,我知道有一些方法可以纠正输出。 但是我的问题是String的不变性如何帮助线程安全执行代码?请解释。
public class Employee {
private String name;
private String skill;
public Employee(String name, String skill) {
this.name = name;
this.skill = skill;
}
public void processEmployee() {
skill = skill +" spring";
System.out.println(skill);
}
}
public class EmployeeRunner {
public static void main(String[] args) {
Employee e1=new Employee("Alice", "java");
Thread t1 = new Thread("t1") {
public void run() {
e1.processEmployee();
}
};
Thread t2 = new Thread("t2") {
public void run() {
e1.processEmployee();
}
};
t1.start();
t2.start();
}
}
输出:
java春季 java春季
有时
java春季 java spring春天