マルチスレッドは、ファイルの内容を検索します
すべてのファイルを通じて、ファイル名には.javaファイルの終わりを通過する時間であるとき、このファイルの内容を見つけるためにスレッドを作成(「マジック」の文字列が含まれています)、スレッドの終了を待たずに、次のファイルを横断し続けます。
1 パッケージmultiplethread。 2 3 インポートjava.io.BufferedReader。 4 インポートjava.io.Fileの。 5 インポートjava.io.FileNotFoundException。 6 インポートjava.io.FileReader。 7 インポートにjava.io.IOException。 8 9 パブリック クラスsearchFileInDirectory { 10 // 实现Runnableを接口方式的多线程 11 公共 静的 ボイドfuncThread1(文字列のパス){ 12 ファイルf = 新しいファイル(パス)。 13 もし(f.exists()){ 14 ファイル[] FS = f.listFiles()。 15 のための(ファイルX:FS){ 16 であれば(x.isDirectory()) 17 funcThread1(x.getAbsolutePath())。 18 であれば(x.isFile()&& x.getName()を含む( "Javaの" )){ 19 新しいスレッド(新しいsearchInFile(X))(開始)。 20 } 21 } 22 } 23 } 24 25 公共 静的 ボイドcheckFile(ファイルX){ 26 Tは=スレッド新しいスレッド(){ 27 公共 ボイドラン(){ 28 トライ(BufferedReaderのBR = 新しい BufferedReaderの(新しいFileReaderの(X))){ 29 ながら(真){ 30 列ライン= br.readLine(); 31 であれば(ライン== NULL ) 32 ブレーク。 33 であれば(line.contains( "マジック" )){ 34 System.out.printf( "找到目标字符串\"マジック\ "在文件%S%N" 、x.getAbsoluteFile())。 35 } 36 } 37 } キャッチ(IOExceptionをE){ 38は、 // TODO自動生成されたブロックのキャッチ 39 e.printStackTrace(); 40 } 41れる } 42である 43である }; 44である t.start(); 45 } 46は、 47 // 匿名マルチスレッドクラス 48 パブリック 静的 ボイドfuncThread2(文字列のパス){ 49 ファイルF = 新しい新しいファイル(パス)。 50 IF (f.exists()){ 51である ファイル[] FS = f.listFiles(); 52である ため(INT I = 0; I <fs.length; I ++ ){ 53は、 ファイルX = ; FS [I] 54は IF (x.isDirectory()){ 55 funcThread2(x.getAbsolutePath()); 56である } 57である IF(。。x.isFile()&& x.getName()を含む( "Javaの" )){ 58 checkFile(X)。// 理論的には、本明細書に直接書き込むことができるが、美的読みやすくするために、それは、別個のcheckFile()に書き込まれる 59 } 60 } 61 62 } 63 } 64 65 // 单线程 66 公共 静的 ボイドfuncNoThread(文字列のパス){ 67 ファイルf = 新しいファイル(パス)。 68 であれば(f.exists()){ 69 ファイル[] FS = f.listFiles()。 70 のための(ファイルX:FS){ 71 であれば(x.isDirectory()) 72 funcNoThread(x.getAbsolutePath())。 73 であれば(x.isFile()&& x.getName()。( "Javaの"含有)){ 74 試みを(BufferedReaderのBR = 新しい BufferedReaderの(新しいFileReaderの(X))){ 75 ながら(真){ 76 列ライン= br.readLine(); 77 であれば(ライン== NULL ) 78 ブレーク。 79 であれば(line.contains( "マジック" )){ 80 System.out.printf( "找到目标字符串\"マジック\ "在文件%S%N" 、x.getAbsoluteFile())。 81 } 82 } 83 } キャッチ(IOExceptionを電子){ 84 // TODO自動生成されたcatchブロック 85 e.printStackTrace(); 86 } 87 88 } 89 } 90 } 91 } 92 93 公共 静的 ボイドメイン(文字列[]引数){ 94 文字列のパス= "F:\\プロジェクト\\ javastudy" 。 95 長い ST1 = にSystem.currentTimeMillis(); 96 funcThread1(パス)。 97 長い ET1 =;のSystem.currentTimeMillis() 98 - :System.out.printf(ET1、 "Dの%のMS時間がスレッド1をマルチスレッド化に費やさ" ; ST1) 99 100 ロング ST2 = にSystem.currentTimeMillis(); 101 funcThread2(パス) 102 ロング = ET2 のSystem.currentTimeMillis(); 103 System.out.printf( "時間が費やされたスレッド2マルチスレッド:Dの%のMS" ET2、 - ST2); 104 105 ロング ST3 = にSystem.currentTimeMillis(); 106 funcNoThread(パス)。 107 ロング ET3 = にSystem.currentTimeMillis(); 108 System.out.printf( "時間費やしたシングルスレッド:%d個のMS"、ET3 -ST3)。 109 } 110 }
レンダリング:
...
...
文書の数ので、マルチスレッドと基本的に同じに費やした時間をシングルスレッド。