Java中的字符串不变性和线程安全性

时间:2018-07-17 01:35:31

标签: java multithreading immutability

我对多线程的了解越多,方法的复杂性就越高。这是一个讨论了很多次的主题,但是没有一篇文章提供明确的结论。字符串是不可变的,意味着您不能更改字符串对象的值,但是可以将引用指向新对象。但是,这对线程安全性有何帮助?下面是我创建的测试类,以找到答案。输出不一致;有时是“ 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春天

0 个答案:

没有答案