摘要:     一 利用Runnable接口来实现多线程,并在线程类中添加一个方法来实现获取线程中的信息         下面是线程类          线程对外返回的是 digest 字节数组 。  &...  阅读全文
posted @ 2010-07-14 10:27 buptduming 阅读(318) | 评论 (0)编辑 收藏
 
 一 使用多线程的情形

         写一个函数来计算多个文件的安全散列函数(SHA),在很大程度上这个程序会受限在I/O上的;即它的速度会受到从磁盘上读文件的限制。
         如果将其写成标准的串行处理的程序,那么程序就会花费大量的时间,来等待磁盘驱动器返回数据,而此时的cpu处于空闲状态。

二 使用多线程的感想  
       如果程序当前处理大量的I/O操作,那么就应该使用多线程的机制来使CPU保持最大的利用率。    
   
      
package cn.bupt.duming.thread;
 
import java.io.* ;
import java.security.*

  
public class ThreadDemo extends Thread{
   
        
private File input ;        
       
        
public ThreadDemo(File input){
            
            
this.input = input ;
                          
        }
 
        
        
public void run()
        
{           
            
try {
            FileInputStream in 
= new FileInputStream(input) ;
            MessageDigest sha 
= MessageDigest.getInstance("SHA") ;
            DigestInputStream din 
= new DigestInputStream(in , sha) ;
            
            
int b ;
            
while((b = din.read()) != -1) ; 
            
/*关闭流*/
            din.close() ;
            
            
byte [] digest = sha.digest() ;
            StringBuffer result 
= new StringBuffer(input.toString()) ;
            result.append(
"") ;
            
            
for(int i = 0 ; i < digest.length ; i++){                 
                result.append(digest[i] 
+ " ") ;                                    
            }
        
            System.out.println(result) ;
                    
        }
 catch (FileNotFoundException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }
 catch (NoSuchAlgorithmException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }
 catch (IOException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }

            
        }

    
    
 }

posted @ 2010-07-13 23:44 buptduming 阅读(124) | 评论 (0)编辑 收藏
仅列出标题
共2页: 上一页 1 2