mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
clear interrupted status for threads in shared pool
This commit is contained in:
@@ -1,12 +1,46 @@
|
||||
package org.jetbrains.jps.api;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
/**
|
||||
* @author Eugene Zhuravlev
|
||||
* Date: 3/29/12
|
||||
*/
|
||||
public class SharedThreadPool {
|
||||
public static final ExecutorService INSTANCE = Executors.newCachedThreadPool();
|
||||
public class SharedThreadPool implements Executor {
|
||||
private static final ExecutorService ourService = Executors.newCachedThreadPool();
|
||||
|
||||
public static final SharedThreadPool INSTANCE = new SharedThreadPool();
|
||||
private SharedThreadPool() {
|
||||
}
|
||||
|
||||
/** @noinspection MethodMayBeStatic*/
|
||||
public Future<?> submit(final Runnable task) {
|
||||
return ourService.submit(new Runnable() {
|
||||
public void run() {
|
||||
try {
|
||||
task.run();
|
||||
}
|
||||
finally {
|
||||
Thread.interrupted(); // reset interrupted status
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void execute(final Runnable task) {
|
||||
ourService.execute(new Runnable() {
|
||||
public void run() {
|
||||
try {
|
||||
task.run();
|
||||
}
|
||||
finally {
|
||||
Thread.interrupted(); // reset interrupted status
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -249,9 +249,21 @@ final class BuildSession implements Runnable, CanceledStatus {
|
||||
}
|
||||
}
|
||||
finally {
|
||||
saveData(pd, dataStorageRoot);
|
||||
}
|
||||
}
|
||||
|
||||
private void saveData(ProjectDescriptor pd, File dataStorageRoot) {
|
||||
final boolean wasInterrupted = Thread.interrupted();
|
||||
try {
|
||||
saveFsState(dataStorageRoot, pd.fsState, myLastEventOrdinal);
|
||||
pd.release();
|
||||
}
|
||||
finally {
|
||||
if (wasInterrupted) {
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void processFSEvent(final CmdlineRemoteProto.Message.ControllerMessage.FSEvent event) {
|
||||
|
||||
Reference in New Issue
Block a user