一个关于线程的简单JAVA程序

来源:百度知道 编辑:UC知道 时间:2024/05/16 20:11:00
程序如下:
import java.io.* ;

//定义一个每隔一秒输出一次换行符的线程,共输出11次
class NewLine extends Thread {
int i ;
public void run()
{
for( i = 0; i < 11; i ++ )
{
System.out.println() ;
try
{
sleep(1000) ;
}
catch(InterruptedException ie)
{}
}
}
}

//定义一个线程每隔0.1秒就会输出一个数字,从0输出到100
public class Thread1 extends Thread{
int i ;
public void run()
{
for( i = 1; i <= 100; i ++ )
{
System.out.print(i) ;
try
{
sleep(100) ;
}catch(InterruptedException ie){}
}
}
public static void main(String[] args) {

NewLine nl = new NewLine() ;
Thread1 t1 = new Thread1() ;

t1.start() ;
nl.start() ;

}
}
运行的结果是
1
2345678910
11121314151617181920
21222324252627282930
。。。。
919293949596979899100
我想问

不是.楼上的有点误会.

T1--->1 (100豪秒)
N1--->换行(1000豪秒)
T1--->2345678910(900豪秒)
这个是第一次运行,刚好满足休眠的时间,所以就会出现只得9个的现象

第二次刚好抢到的是先N1--->换行(1000豪秒)
T1才抢到 11121314151617181920
..............
回答完毕

这没什么奇怪的,两个线程的运行不是你想象中那么有规律的,其中sleep函数使线程进入休眠状态,时间一到后又回到等待队列然后等待CPU的执行,他不是恢复到执行状态,因此想用sleep方法来精确控制线程按照某个时间尺度计划工作是不行的.