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();
}