Javaのマルチスレッドinterrupt中断スレッドの3つの方法


方法1:

@Override
public void run(){
    for(int i = 0; i < 100; i++){
        System.out.println(this.getname()+":"+i);
        try{
            Thread.sleep(1000);
        }catch(InterruptedException e){
            System.out.println("    !");
            return;  //        ,      
        }
    }
}

メソッド2(Javaが推奨するメソッド):
//       FlagThread       ,      

public void FlagThread extends Thread{
    //      
    private boolean isInterrupted = false;

    //      
    public void stopCurrentThread(){
        this.isInterrupted = true; //    
        super.interrupt(); //      ,    
    }

    @Override
    public void run(){
        while(!isInterrupted){
            try{
                for(int i = 0; i < 100; i++){
                    System.out.println(this.getname()+":"+i);
                    Thread.sleep(1000);
                }
            }catch(InterruptedException e){
                 //      ,          
            }
        }

        System.out.println("    !");
    }
}

方法3
通常の方法でスレッドを中断し、ループでsleep()メソッドを呼び出すことができないことを要求します.
IO読み書きスレッド停止について
理論的には止められず、IOストリームを中断し、異常を投げ出してから処理するしかない.ビッグデータのIO読み書き操作をループに入れて行うことが望ましい.これにより、ループごとにスレッドが停止するタイミングがあり、運転中のスレッドをどのように停止するかの問題にも転化する.