【发布时间】:2018-06-07 11:31:24
【问题描述】:
您好,我有 try catch 结构,并希望在 finally 语句中使代码异步。我尝试将此部分放入 lambda 并转换为任务,将其放入 ForkJoinPool,但存在 Class Cast Exception。如何使这部分代码更好地异步。我必须在字段之前使用 atomic 或 volatile 吗?
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) {
try {
// other code
builder.append("Test");
} finally {
Runnable runnable = () -> {
final Record record = new Record();
record.setActionDetails(builder.toString());
recorder.record(record);
};
ForkJoinTask<?> task = (ForkJoinTask<?>)runnable;
ForkJoinPool pool = new ForkJoinPool();
pool.invoke(task);
}
}
}
【问题讨论】:
-
我真的不明白你想做什么,但它给我带来了几个危险信号。
-
类似于记录失败的尝试,这是您想要实现的目标吗?
-
抱歉代码错误。
标签: java multithreading concurrency runnable