使用forJoinPool

时间:2018-06-07 11:31:25

标签: java multithreading concurrency runnable

你好我有try catch结构,并希望在finally语句中使代码异步。我尝试将这部分放入lambda并转换为任务,将其放入ForkJoinPool,但是有类Cast Exception。如何更好地使这部分代码异步。我是否必须在字段之前使用原子或易失性?

    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);

        }
    }
}

1 个答案:

答案 0 :(得分:0)

我的意思是这样:

ForkJoinPool pool = new ForkJoinPool();
pool.submit(() -> {
        final Record record = new Record();
        record.setActionDetails(builder.toString());
        recorder.record(record);
});

但是它需要在字段之前使用一些修饰符吗?