java for sleep_Java多线程(四)java中的Sleep方法

本文详细探讨了Java中Thread类的sleep方法在多线程执行中的影响,揭示了线程睡眠的机制,以及它如何与抢占式调度结合,同时介绍了线程生命周期的概念。通过实例展示了不同情况下线程交替执行和严格交替的差异。
摘要由CSDN通过智能技术生成

Java多线程系列更新中~

正式篇:

番外篇(神TM番外篇):

Thread类为睡眠线程提供了两种方法:

public static void sleep(long miliseconds)抛出InterruptedException

public static void sleep(long miliseconds,int nanos)抛出InterruptedException

参数声明:

miliseconds-以毫秒为单位的睡眠时间。

nanos-这是0-999999额外纳秒的睡眠时间。

用法示例

1.不睡眠的情况

public class Multi extendsThread{public voidrun() {for(int i=1; i<1000; i++) {//try {//Thread.sleep(500);//}catch (InterruptedException e) {//e.printStackTrace();//}

System.out.println(i);

}

}public static voidmain(String[] args) {

Multi t1= newMulti();

Multi t2= newMulti();

t1.start();

t2.start();

}

}

输出情况(每台计算机不一样,每次运行也会不一样,我截取部分数据分析)

t1: 1、2、3、4、5、6、7、8、9、10

t2: 1、2、3、4、5、6、7、8

t1: 11、12、13、14、15、16、17、18、19、20、21、22、23、24、25、26、27、28、29、30

……

可以看出,这两个线程的确是交替执行的。JAVA采用抢占式线程调度,也就是每个线程由系统来分配时间,线程的切换并不由线程本身决定。

2. 线程睡眠的情况

public class Multi extends Thread{

public void run() {

for(int i=1; i<1000; i++) {

try {

Thread.sleep(500);

}catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(i);

}

}

public static void main(String[] args) {

Multi t1 = new Multi();

Multi t2 = new Multi();

t1.start();

t2.start();

}

}

这个输出就是严格的一个一次的交替原则。

t1: 1

t2: 1

t1: 2

t2: 2

t1: 3

……

这是因为Sleep()使得当前线程进入阻塞状态,系统便调用了另一线程,循环往复,便出现了上面的输出结果。那么,什么情况阻塞,只有Sleep吗?这就引出了线程的生命周期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值