Java 在新线程()之外的已同步之前字段
我想成为异步的一部分。我添加了一个新的Thread()并添加了代码。对于外部的字段和方法必须做什么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
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
块更轻量级