現在、OCJPのGold資格の勉強を行っております。
それに伴い、スレッドの学習のためにコードを書いていたところ、以下の2つのコードで実行結果が異なることに対して、疑問に思いました。
実行結果が異なる理由をご教示願いたいです。
Java
1import java.util.concurrent.ExecutorService; 2import java.util.concurrent.Executors; 3 4public class Main { 5 6 public static void main(String[] args) { 7 ExecutorService service = null; 8 service = Executors.newSingleThreadExecutor(); 9 System.out.println("service.execute"); 10 String str = " * "; 11 for (int i = 0; i < 3; i++) { 12 service.execute(() -> { 13 System.out.print("thread task"); 14 for (int a = 0; a < 5; a++) { 15 System.out.print(str); 16 } 17 System.out.println(); 18 }); 19 } 20 } 21} 22 23■実行結果 24service.execute 25thread task * * * * * 26thread task * * * * * 27thread task * * * * *
Java
1 2import java.util.concurrent.ExecutorService; 3import java.util.concurrent.Executors; 4 5public class Main { 6 7 public static void main(String[] args) { 8 ExecutorService service = null; 9 service = Executors.newSingleThreadExecutor(); 10 System.out.println("service.execute"); 11 String str = " * "; 12 for (int i = 0; i < 3; i++) { 13 System.out.print("thread task"); 14 service.execute(() -> { 15 16 for (int a = 0; a < 5; a++) { 17 System.out.print(str); 18 } 19 System.out.println(); 20 }); 21 } 22 23 } 24 25} 26 27■実行結果 28service.execute 29thread taskthread taskthread task * * * * * 30 * * * * * 31 * * * * * 32 33 34
以上、宜しくお願い致します。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/05 12:17 編集
2020/04/05 12:24 編集
2020/04/05 12:27 編集
2020/04/05 12:32
2020/04/05 12:44 編集
2020/04/05 13:00 編集
2020/04/05 13:15
2020/04/05 13:31
2020/04/05 13:42
2020/04/05 13:46
2020/04/05 13:58