java.util.concurrent
http://docs.oracle.com/javase/jp/6/api/java/util/concurrent/package-summary.htmlより * 並行プログラミングでよく使用されるユーティリティークラス * マルチスレッド・プログラミングで使用する * concurrent(コンカレント) = 同時発生する
Executorインタフェース
* スレッドの再利用を可能にする
サンプル
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class SampleExecutors { public static void main(String[] args) { ExecutorService executor = Executors.newSingleThreadExecutor(); System.out.println("★Begin★"); for (int i = 0; i < 5; i++) { executor.execute(() -> { try { System.out.println("Starts : " + getCurrentTime()); Thread.sleep(1000L); System.out.println("Done : " + getCurrentTime()); } catch (InterruptedException ex) { ex.printStackTrace(); } }); } System.out.println("★End★"); } public static String getCurrentTime() { Calendar calendar = Calendar.getInstance(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss SSS"); return simpleDateFormat.format(calendar.getTime()); } }出力結果
★Begin★ ★End★ Starts : 2016/08/24 22:32:16 692 Done : 2016/08/24 22:32:17 734 Starts : 2016/08/24 22:32:17 734 Done : 2016/08/24 22:32:18 735 Starts : 2016/08/24 22:32:18 736 Done : 2016/08/24 22:32:19 737 Starts : 2016/08/24 22:32:19 737 Done : 2016/08/24 22:32:20 738 Starts : 2016/08/24 22:32:20 739 Done : 2016/08/24 22:32:21 739
API仕様
http://docs.oracle.com/javase/jp/7/api/java/util/concurrent/ExecutorService.html参考文献
http://java.keicode.com/lang/multithreading-executor.phphttp://d.hatena.ne.jp/j5ik2o/20110213/1297605350
http://www.02.246.ne.jp/~torutk/javahow2/concurrent.html
ExecutorServiceインタフェース
* スレッドの再利用を可能にする * Executorインタフェースは、スーパーインタフェース
処理終了判定 : isShutdown() / isTerminated()
https://docs.oracle.com/javase/jp/6/api/java/util/concurrent/ExecutorService.html#isShutdown()より ~~~~~~~~ * boolean isShutdown() この executor がシャットダウンしていた場合、true を返します * boolean isTerminated() シャットダウンに続いてすべてのタスクが完了していた場合、true を返します。 shutdown または shutdownNow のいずれかが isTerminated の前に呼び出された場合を除き、 isTerminated が true になることはありません。 ~~~~~~~~何が違う?
shutdown または shutdownNow を呼び出しても、直ぐに終了するとは限らない。 「実行中⇒シャットダウン中⇒終了」って流れになる。 なので、isShutdown()がTrueになるのは「シャットダウン中」と「終了」が条件になるが isTerminated()は「終了」のみが条件になる。
参考文献
http://docs.oracle.com/javase/jp/6/api/java/util/concurrent/ExecutorService.htmlhttp://waman.hatenablog.com/entry/20120122/1327241289
参考文献
http://www.02.246.ne.jp/~torutk/javahow2/concurrent.htmlhttp://java.keicode.com/lang/multithreading-executor.php
http://aoking.hatenablog.jp/entry/20120319/1332153595
http://gurimmer.lolipop.jp/daihakken/2012/01/27/javaexecutorservice%E3%81%AE%E6%AD%A3%E3%81%97%E3%81%84%E7%B5%82%E4%BA%86shutdown%E3%81%AE%E4%BB%95%E6%96%B9/
http://d.hatena.ne.jp/tanakakns/20120528/1338222493
http://d.hatena.ne.jp/asakichy/20120207/1328566158
http://www.techscore.com/tech/Java/JavaSE/Thread/7-2/
http://tech-ragtime.seesaa.net/article/262283938.html