Javaの学習 - マルチスレッドを作成します

マルチスレッドは、ファイルの内容を検索します

すべてのファイルを通じて、ファイル名には.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 }

レンダリング:

 ...

 

 ...

 

 文書の数ので、マルチスレッドと基本的に同じに費やした時間をシングルスレッド。

 

おすすめ

転載: www.cnblogs.com/gilgamesh-hjb/p/12233263.html