сделать код асинхронным с forJoinPool - PullRequest
0 голосов
/ 07 июня 2018

Здравствуйте, у меня есть структура try catch и я хочу сделать асинхронный код в операторе finally.Я пытаюсь поместить эту часть в лямбду и привести к задаче, чтобы поставить ее ForkJoinPool, но есть исключение Class Cast.Как сделать асинхронную часть кода лучше.Нужно ли использовать атомные или переменные перед полями?

    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 голосов
/ 07 июня 2018

Я имею в виду так:

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

но нужно ли использовать какой-либо модификатор перед полями?

...