###やりたい事
マルチスレッドを使って全てのスレッドを同時に実行して全てのスレッドが終了するまで待機する処理を作りたです。
###コード内容
pdfの複数のディレクトリをマルチスレッドで処理するコード
###現状
提示コードの下部の//////コメント部内部のコードですが.join()関数を使って終了するまで待機していますがこのやり方だと
スレッドA,BがあるとしてAが実行してAが終了するまでBの処理が始まらず。結果的にAの次がB という感じで
順番に処理されていまいす。
現在はThreadクラスを継承させて行っています。*
###質問内容
上記のやりたい事を実現するにはどういった手法を行えばいいのでしょうか?Threadクラスを継承するやり方だと現状のようなやりかたになってしまいます。
###参考サイト
参考サイトA: https://qiita.com/yacchi1123/items/d89edbaf681a630d4343
Github: https://github.com/Shigurechan/PDFConverter
java
1import java.io.File; 2 3import java.util.ArrayList; 4import java.util.List; 5import java.util.Scanner; 6 7public class Main 8{ 9 public static void main(String args[]) 10 { 11 Scanner scanner = new Scanner(System.in); 12 List<Converter> dirList = new ArrayList<>(); //ディレクトリ 13 List<ConverterPage> pageList = new ArrayList<>(); //ページ 14 15 System.out.println("windows: Cntrl + z 開始"); 16 System.out.println("linux: Cntrl + D 開始\n"); 17 18 19 int i = 0; //表示用 20 while(true) 21 { 22 23 System.out.print("\nDirectory or File > "); 24 25 if(scanner.hasNextLine() == false) 26 { 27 break; 28 } 29 30 31 32 String fileName = scanner.nextLine(); 33 System.out.println(fileName); 34 35 File file = new File(fileName); 36 37 //System.out.println(file.getName().substring(file.getName().lastIndexOf("."))); 38 39 System.out.println(" " + i + " >: " + fileName); 40 41 //ファイルかディレクトリかを選別 42 if(file.exists() == true) 43 { 44 if(file.isFile() == true) 45 { 46 String extension = file.getName().substring(file.getName().lastIndexOf(".")); 47 48 if(extension.equals(".png") || extension.equals(".jpg") || extension.equals(".jpeg")) 49 { 50 pageList.add(new ConverterPage(fileName)); 51 } 52 } 53 else 54 { 55 dirList.add(new Converter(fileName)); 56 } 57 } 58 else 59 { 60 System.out.println("対応形式ではりません: " + file.getName()); 61 } 62 63 i++; 64 } 65 66 67 //ディレクトリ 68 if(dirList.size() > 0) 69 { 70 for(Converter con : dirList) 71 { 72 con.start(); 73 } 74 75 } 76 77 //ファイル 78 if(pageList.size() > 0) 79 { 80 for(ConverterPage con : pageList) 81 { 82 con.start(); 83 } 84 } 85 86 long startTime = System.currentTimeMillis(); //開始時間 87 88 89 try 90 { 91////////////////////////////////////////////////////////////////////////////////////////////// 92 for(Converter con : dirList) 93 { 94 con.join(); 95 } 96////////////////////////////////////////////////////////////////////////////////////////////// 97 for(ConverterPage con : pageList) 98 { 99 con.join(); 100 } 101 } 102 catch(InterruptedException e) 103 { 104 e.printStackTrace(); 105 } 106 107 108 scanner.close(); //scanner close 109 110 long endTime = System.currentTimeMillis(); //終了時間 111 System.out.println("終了: " + (endTime - startTime)); 112 } 113} 114 115
回答4件
あなたの回答
tips
プレビュー