Thread类中sleep方法

学习java一年了,对Thread类中的sleep的方法理解完全错误。

// 创建一个TestThread线程类,并且重写run方法,

public class TestThread extends Thread{

public volatile static int count=0;

@Override
public void run() {
synchronized(RunTest.class){

count++;
if(count == 21){
try {
Thread.sleep(2000); // 让当前线程休眠两秒钟
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

System.out.println(count);

}
}
}
}


// 创建一个带有main方法的测试类

public class mainTest {
public static void main(String[] args) {

TestThread [] rt = new TestThread [10000];
for(int i=0;i<10000;i++){
rt[i] = new TestThread ();
rt[i].start();
}

}

}


以前错误的以为:当count=21的时候等于21的线程就会休眠两秒钟,其他线程会继续执行

实质上是: 当count=21的时候等于21的线程没有释放cpu的时间片,而是继续占有cpu的时间片。所以其他线程将无法获取到cpu时间片将等待获取cpu时间片。并不是继续执行。 jdk说明文档上面已经说的比较清楚。

Thread类中sleep方法_第1张图片








你可能感兴趣的:(java)