Runnable
ExecutorService executorService = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
executorService.submit(new RunTask());
}
if (!executorService.isShutdown()) {
executorService.shutdown();
}
public class RunTask implements Runnable {
@Override
public void run() {
Log.v("-->run", Thread.currentThread().getName() + "execute!!!");
}
}

Callable、Future
try {
List<Future<String>> results = new ArrayList<>();
ExecutorService executorService = Executors.newCachedThreadPool();
for (int i = 0; i < 7; i++) {
results.add(executorService.submit(new CallTask()));
}
for (Future<String> future : results) {
Log.v("-->future", future.get());
}
Log.v("-->", "Main complete");
if (!executorService.isShutdown()) {
executorService.shutdown();
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
public class CallTask implements Callable<String> {
@Override
public String call() throws Exception {
Log.v("-->call", Thread.currentThread().getName() + "execute!!!");
return Thread.currentThread().getName() + "complete";
}
}

FutureTask
try {
ExecutorService executorService = Executors.newCachedThreadPool();
FutureTask<String> futureTask = new FutureTask<>(
new Callable<String>() {
@Override
public String call() throws Exception {
Log.v("-->call", Thread.currentThread().getName() + "execute!!!");
return Thread.currentThread().getName() + "complete";
}
});
executorService.submit(futureTask);
Log.v("-->futureTask", futureTask.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
