Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在新线程()之外的已同步之前字段_Java_Multithreading_Concurrency - Fatal编程技术网

Java 在新线程()之外的已同步之前字段

Java 在新线程()之外的已同步之前字段,java,multithreading,concurrency,Java,Multithreading,Concurrency,我想成为异步的一部分。我添加了一个新的Thread()并添加了代码。对于外部的字段和方法必须做什么 public class Record { private String actionDetails; public void setActionDetails(String actionDetails) { this.actionDetails = actionDetails; } } public class Recorder { priva

我想成为异步的一部分。我添加了一个新的Thread()并添加了代码。对于外部的字段和方法必须做什么

public class Record {
    private String actionDetails;

    public void setActionDetails(String actionDetails) {
        this.actionDetails = actionDetails;
    }
}

public class Recorder {
    private Record record;

    public void record(Record record){
        this.record = record;
    }
}

public class Test {
    private static Recorder recorder = new Recorder();
    private static StringBuilder builder;

    public static void main(String[] args) {
        builder.append("Test");

        new Thread(() -> {
            final Record record = new Record();
            record.setActionDetails(builder.toString());
            recorder.record(record);
        }).start();
    }
}

我认为对于recorder,record(),setActionDetails()应该使用synchronized modificator,并使用StringBuffer而不是StringBuilder。

您显示的代码没有任何用处,也没有任何使其多线程化的好处。“做什么”的问题只能用代表您正试图做的事情的代码来回答(有用的)。您当前的代码保证在任何情况下都能正常工作。现在你可以标记
私有字符串actionDetails
私人记录作为
volatile
,因为它确保了对所有线程的引用所做的更改的可见性,并且比
synchronized
块更轻量级