Java Thread學習之路_interrupt

Java中的數組是個重點,雖然平時都不一定用得上,當我使用interrupt方法時,遇到了一個問題。

interrupt有兩個方法可以來判斷線程的狀態量。分別是:

  1. interrupted:執行完畢會清除狀態,在第二次調用時會置爲false;

  2. isinterrupted:執行完不會改變.

我遇到的問題正是和這兩個方法有關,下面爲測試代碼:

package com.thread;

class Some extends Thread{
    static int i=0;
    static int y=0;
    @Override
    public void run(){
        for (int i = 0; i < 100; i++) {
            System.out.println("停止之前"+i);

                try {
                    System.out.println("H停止了沒"+i+this.interrupted()+" show ");
//                  if(this.isInterrupted()){
//                      System.out.println("停止之後"+i);
//                      
//                  }


//                  Thread.sleep(10000);
//                  System.out.println("停止之後"+i);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    this.interrupt();
                    System.out.println(this.isInterrupted());
                    e.printStackTrace();
                }



        }
        System.out.println("for 之後");
//      i=1;
//      try {
//          Thread.sleep(1000);
//      } catch (InterruptedException e) {
//          // TODO Auto-generated catch block
//          e.printStackTrace();
//      }
//      
//      y=1;
//      System.out.println(i+"add "+y);
    }
}

public class ThreadSleep {
    public static void main(String[] args) {
        Some some=new Some();
        some.start();
        try {
            some.sleep(1);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        some.interrupt();
//      try {
//          Thread.sleep(100);
//      } catch (InterruptedException e) {
//          // TODO Auto-generated catch block
//          e.printStackTrace();
//      }
//      some.stop();
        System.out.println(Some.i+"add "+ some.y);
    }
}

執行之後會出現:
當使用interrupted時,會出現:

停止之前0
H停止了沒0false show
停止之前1
H停止了沒1false show
停止之前2
H停止了沒2false show
停止之前3
H停止了沒3false show
停止之前4
H停止了沒4true show
停止之前5
0add 0
H停止了沒5false show
停止之前6
H停止了沒6false show
停止之前7
H停止了沒7false show
停止之前8
H停止了沒8false show
停止之前9
H停止了沒9false show
停止之前10
H停止了沒10false show
停止之前11
H停止了沒11false show
停止之前12
H停止了沒12false show
停止之前13
H停止了沒13false show
停止之前14
H停止了沒14false show
停止之前15
H停止了沒15false show
停止之前16
H停止了沒16false show
停止之前17
H停止了沒17false show
停止之前18
H停止了沒18false show
停止之前19
H停止了沒19false show
停止之前20
H停止了沒20false show
停止之前21
H停止了沒21false show
停止之前22
H停止了沒22false show
停止之前23
H停止了沒23false show
停止之前24
H停止了沒24false show
停止之前25
H停止了沒25false show
停止之前26
H停止了沒26false show
停止之前27
H停止了沒27false show
停止之前28
H停止了沒28false show
停止之前29
H停止了沒29false show
停止之前30
H停止了沒30false show
停止之前31
H停止了沒31false show
停止之前32
H停止了沒32false show
停止之前33
H停止了沒33false show
停止之前34
H停止了沒34false show
停止之前35
H停止了沒35false show
停止之前36
H停止了沒36false show
停止之前37
H停止了沒37false show
停止之前38
H停止了沒38false show
停止之前39
H停止了沒39false show
停止之前40
H停止了沒40false show
停止之前41
H停止了沒41false show
停止之前42
H停止了沒42false show
停止之前43
H停止了沒43false show
停止之前44
H停止了沒44false show
停止之前45
H停止了沒45false show
停止之前46
H停止了沒46false show
停止之前47
H停止了沒47false show
停止之前48
H停止了沒48false show
停止之前49
H停止了沒49false show
停止之前50
H停止了沒50false show
停止之前51
H停止了沒51false show
停止之前52
H停止了沒52false show
停止之前53
H停止了沒53false show
停止之前54
H停止了沒54false show
停止之前55
H停止了沒55false show
停止之前56
H停止了沒56false show
停止之前57
H停止了沒57false show
停止之前58
H停止了沒58false show
停止之前59
H停止了沒59false show
停止之前60
H停止了沒60false show
停止之前61
H停止了沒61false show
停止之前62
H停止了沒62false show
停止之前63
H停止了沒63false show
停止之前64
H停止了沒64false show
停止之前65
H停止了沒65false show
停止之前66
H停止了沒66false show
停止之前67
H停止了沒67false show
停止之前68
H停止了沒68false show
停止之前69
H停止了沒69false show
停止之前70
H停止了沒70false show
停止之前71
H停止了沒71false show
停止之前72
H停止了沒72false show
停止之前73
H停止了沒73false show
停止之前74
H停止了沒74false show
停止之前75
H停止了沒75false show
停止之前76
H停止了沒76false show
停止之前77
H停止了沒77false show
停止之前78
H停止了沒78false show
停止之前79
H停止了沒79false show
停止之前80
H停止了沒80false show
停止之前81
H停止了沒81false show
停止之前82
H停止了沒82false show
停止之前83
H停止了沒83false show
停止之前84
H停止了沒84false show
停止之前85
H停止了沒85false show
停止之前86
H停止了沒86false show
停止之前87
H停止了沒87false show
停止之前88
H停止了沒88false show
停止之前89
H停止了沒89false show
停止之前90
H停止了沒90false show
停止之前91
H停止了沒91false show
停止之前92
H停止了沒92false show
停止之前93
H停止了沒93false show
停止之前94
H停止了沒94false show
停止之前95
H停止了沒95false show
停止之前96
H停止了沒96false show
停止之前97
H停止了沒97false show
停止之前98
H停止了沒98false show
停止之前99
H停止了沒99false show
for 之後

也就是在第8次停止。
而使用isintercepter時,會出現停止位置不一樣:
突然想清楚了,原因是:

cpu中執行兩次程序的性能是不一樣的,所以調用interrupt的時間也是不一樣的。還害的我去看了下兩個方法。。。紙張

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章