Java中的数组是个重点,虽然平时都不一定用得上,当我使用interrupt方法时,遇到了一个问题。
interrupt有两个方法可以来判断线程的状态量。分别是:
interrupted:执行完毕会清除状态,在第二次调用时会置为false;
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的时间也是不一样的。还害的我去看了下两个方法。。。纸张