Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
newSingleThreadExecutor в доках явно сказано «все задачи выполняются в одном потоке последовательно, не более одной одновременно». Ну и реализуется интерфейс ExecutorService, а не Executor. Первый является расширением второго, так что все ок. Напишите, пожалуйста, чем же Вам не подошел этот вариант?SerialExecutor засылать таски из нескольких потоков, то таска может выполнится более одного раза, и даже одновременно.public class SerialExecutor {
private static final ExecutorService executorService = Executors.newSingleThreadExecutor();
public static void execute(final Runnable task) {
executorService.submit(task);
}
}
class ServiceWrapper extends Service {
public void longJob(final Object arg) {
SerialExecutor.execute(new Runnable() {
public void run() {
ServiceWrapper.super.longJob(arg);
}
});
}
}
class ServiceWrapper extends Service {
private static final ExecutorService executorService = Executors.newSingleThreadExecutor();
public void longJob(final Object arg) {
executorService.execute(new Runnable() {
public void run() {
ServiceWrapper.super.longJob(arg);
}
});
}
}
class Service {
public String /* чисто для примера */ longJob(Object arg) {...}
}
...
final Future<Result> future = someExecutorService.submit(new Callable<Result>() {
public String call() {
return someService.longJob(arg);
}
});
// отдаёте ваш future, куда надо
...
// Где надо:
final String result = future.get();
Распараллеливание с минимальными правками в коде