You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by rw...@apache.org on 2017/12/07 17:57:51 UTC
svn commit: r1817402 - in
/pivot/trunk/core/src/org/apache/pivot/util/concurrent:
SimpleExecutorService.java Task.java
Author: rwhitcomb
Date: Thu Dec 7 17:57:51 2017
New Revision: 1817402
URL: http://svn.apache.org/viewvc?rev=1817402&view=rev
Log:
PIVOT-498: Make the default executor service for Task, TaskSequence, and
TaskGroup into an "Executors.newCachedThreadPool()", instead of our simple
service, which was created as a workaround for some problems seen ~7-8
years ago.
Move that "DefaultExecutorService" out to its own "SimpleExecutorService"
class, so it can still be used as a workaround if necessary.
Added:
pivot/trunk/core/src/org/apache/pivot/util/concurrent/SimpleExecutorService.java
Modified:
pivot/trunk/core/src/org/apache/pivot/util/concurrent/Task.java
Added: pivot/trunk/core/src/org/apache/pivot/util/concurrent/SimpleExecutorService.java
URL: http://svn.apache.org/viewvc/pivot/trunk/core/src/org/apache/pivot/util/concurrent/SimpleExecutorService.java?rev=1817402&view=auto
==============================================================================
--- pivot/trunk/core/src/org/apache/pivot/util/concurrent/SimpleExecutorService.java (added)
+++ pivot/trunk/core/src/org/apache/pivot/util/concurrent/SimpleExecutorService.java Thu Dec 7 17:57:51 2017
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pivot.util.concurrent;
+
+import java.util.concurrent.AbstractExecutorService;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * An executor service that simply spawns a new thread on every call to {@link #execute}.
+ * <p> Note: this has been moved out of {@link Task} where it used to be used as the default
+ * executor service as a workaround for problems seen some time ago with
+ * {@link java.util.concurrent.Executors#newCachedThreadPool} when running as an applet.
+ * <p> The default for {@link Task}, {@link TaskSequence} and {@link TaskGroup} is now to
+ * use the system service, but this class may be used still as a workaround if problems
+ * are still seen (unlikely).
+ */
+public class SimpleExecutorService extends AbstractExecutorService {
+ private boolean shutdown = false;
+
+ @Override
+ public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {
+ return true;
+ }
+
+ @Override
+ public void shutdown() {
+ shutdownNow();
+ }
+
+ @Override
+ public java.util.List<Runnable> shutdownNow() {
+ shutdown = true;
+ return new java.util.ArrayList<>();
+ }
+
+ @Override
+ public boolean isShutdown() {
+ return shutdown;
+ }
+
+ @Override
+ public boolean isTerminated() {
+ return isShutdown();
+ }
+
+ @Override
+ public void execute(Runnable command) {
+ Thread thread = new Thread(command);
+ thread.start();
+ }
+}
+
Modified: pivot/trunk/core/src/org/apache/pivot/util/concurrent/Task.java
URL: http://svn.apache.org/viewvc/pivot/trunk/core/src/org/apache/pivot/util/concurrent/Task.java?rev=1817402&r1=1817401&r2=1817402&view=diff
==============================================================================
--- pivot/trunk/core/src/org/apache/pivot/util/concurrent/Task.java (original)
+++ pivot/trunk/core/src/org/apache/pivot/util/concurrent/Task.java Thu Dec 7 17:57:51 2017
@@ -17,9 +17,8 @@
package org.apache.pivot.util.concurrent;
import java.lang.ref.WeakReference;
-import java.util.concurrent.AbstractExecutorService;
+import java.util.concurrent.Executors;
import java.util.concurrent.ExecutorService;
-import java.util.concurrent.TimeUnit;
import org.apache.pivot.util.Utils;
@@ -69,42 +68,6 @@ public abstract class Task<V> {
}
}
- private static class DefaultExecutorService extends AbstractExecutorService {
- private boolean shutdown = false;
-
- @Override
- public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {
- return true;
- }
-
- @Override
- public void shutdown() {
- shutdownNow();
- }
-
- @Override
- public java.util.List<Runnable> shutdownNow() {
- shutdown = true;
- return new java.util.ArrayList<>();
- }
-
- @Override
- public boolean isShutdown() {
- return shutdown;
- }
-
- @Override
- public boolean isTerminated() {
- return isShutdown();
- }
-
- @Override
- public void execute(Runnable command) {
- Thread thread = new Thread(command);
- thread.start();
- }
- }
-
private ExecutorService executorService;
private V result = null;
@@ -115,10 +78,7 @@ public abstract class Task<V> {
protected volatile long timeout = Long.MAX_VALUE;
protected volatile boolean abort = false;
- // TODO This is a workaround for an issue with
- // Executors.newCachedThreadPool(), which
- // unpredictably throws IllegalThreadStateException when run in an applet.
- public static final ExecutorService DEFAULT_EXECUTOR_SERVICE = new DefaultExecutorService();
+ public static final ExecutorService DEFAULT_EXECUTOR_SERVICE = Executors.newCachedThreadPool();
public Task() {
this(DEFAULT_EXECUTOR_SERVICE);