Thread.sleep(123);
} catch (InterruptedException e) {
e.printStackTrace();
} 睡眠的位置:为了让其他线程有机会执行,可以将Thread.sleep()的调用放线程run()之内。这样才能保证该线程执行过程中会睡眠。 例如,在前面的例子中,将一个耗时的操作改为睡眠,以减慢线程的执行。可以这么写: public void run() {
for(int i = 0;i<5;i++){ // 很耗时的操作,用来减慢线程的执行
// for(long k= 0; k <100000000;k++);
try {
Thread.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace(); .
}
System.out.println(this.getName()+" :"+i);
}
} 运行结果: 阿三 :0
李四 :0
阿三 :1
阿三 :2
阿三 :3
李四 :1
李四 :2
阿三 :4
李四 :3
李四 :4
Process finished with exit code 0 这样,线程在每次执行过程中,总会睡眠3毫秒,睡眠了,其他的线程就有机会执行了。 注意: 1、线程睡眠是帮助所有线程获得运行机会的最好方法。 2、线程睡眠到期自动苏醒,并返回到可运行状态,不是运行状态。sleep()中指定的时间是线程不会运行的最短时间。因此,sleep()方法不能保证该线程睡眠到期后就开始执行。 3、sleep()是静态方法,只能控制当前正在运行的线程。 下面给个例子: /**
* 一个计数器,计数到100,在每个数字之间暂停1秒,每隔10个数字输出一个字符串
*
* @author leizhimin 2008-9-14 9:53:49
*/
public class MyThread extends Thread {
public void run() {
for (int i = 0; i < 100; i++) {
if ((i) % 10 == 0) {
System.out.println("-------" + i);
}
System.out.print(i);
try {
Thread.sleep(1);
System.out.print(" 线程睡眠1毫秒!\n");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new MyThread().start();
}
}
-------0
0 线程睡眠1毫秒!
1 线程睡眠1毫秒!
2 线程睡眠1毫秒!
3 线程睡眠1毫秒!
4 线程睡眠1毫秒!
5 线程睡眠1毫秒!
6 线程睡眠1毫秒!
7 线程睡眠1毫秒!
8 线程睡眠1毫秒!
9 线程睡眠1毫秒!
-------10
10 线程睡眠1毫秒!
11 线程睡眠1毫秒!
12 线程睡眠1毫秒!
13 线程睡眠1毫秒!
14 线程睡眠1毫秒!
15 线程睡眠1毫秒!
16 线程睡眠1毫秒!
17 线程睡眠1毫秒!
18 线程睡眠1毫秒!
19 线程睡眠1毫秒!
-------20
20 线程睡眠1毫秒!
21 线程睡眠1毫秒!
22 线程睡眠1毫秒!
23 线程睡眠1毫秒!
24 线程睡眠1毫秒!
25 线程睡眠1毫秒!
26 线程睡眠1毫秒!
27 线程睡眠1毫秒!
28 线程睡眠1毫秒!
-------30
30 线程睡眠1毫秒!
31 线程睡眠1毫秒!
32 线程睡眠1毫秒!
33 线程睡眠1毫秒!
34 线程睡眠1毫秒!
35 线程睡眠1毫秒!
36 线程睡眠1毫秒!
37 线程睡眠1毫秒!
38 线程睡眠1毫秒!
39 线程睡眠1毫秒!
-------40
40 线程睡眠1毫秒!
41 线程睡眠1毫秒!
42 线程睡眠1毫秒!
43 线程睡眠1毫秒!
44 线程睡眠1毫秒!
45 线程睡眠1毫秒!
46 线程睡眠1毫秒!
47 线程睡眠1毫秒!
48 线程睡眠1毫秒!
49 线程睡眠1毫秒!
-------50
50 线程睡眠1毫秒!
51 线程睡眠1毫秒!
52 线程睡眠1毫秒!
53 线程睡眠1毫秒!
54 线程睡眠1毫秒!
55 线程睡眠1毫秒!
56 线程睡眠1毫秒!
57 线程睡眠1毫秒!
58 线程睡眠1毫秒!
59 线程睡眠1毫秒!
-------60
60 线程睡眠1毫秒!
61 线程睡眠1毫秒!
62 线程睡眠1毫秒!
63 线程睡眠1毫秒!
64 线程睡眠1毫秒!
65 线程睡眠1毫秒!
66 线程睡眠1毫秒!
67 线程睡眠1毫秒!
68 线程睡眠1毫秒!
69 线程睡眠1毫秒!
-------70
70 线程睡眠1毫秒!
71 线程睡眠1毫秒!
72 线程睡眠1毫秒!
73 线程睡眠1毫秒!
74 线程睡眠1毫秒!
75 线程睡眠1毫秒!
76 线程睡眠1毫秒!
77 线程睡眠1毫秒!
78 线程睡眠1毫秒!
79 线程睡眠1毫秒!
-------80
80 线程睡眠1毫秒!
81 线程睡眠1毫秒!
82 线程睡眠1毫秒!
83 线程睡眠1毫秒!
84 线程睡眠1毫秒!
85 线程睡眠1毫秒!
86 线程睡眠1毫秒!
87 线程睡眠1毫秒!
88 线程睡眠1毫秒!
89 线程睡眠1毫秒!
-------90
90 线程睡眠1毫秒!
91 线程睡眠1毫秒!
92 线程睡眠1毫秒!
93 线程睡眠1毫秒!
94 线程睡眠1毫秒!
95 线程睡眠1毫秒!
96 线程睡眠1毫秒!
97 线程睡眠1毫秒!
98 线程睡眠1毫秒!
99 线程睡眠1毫秒!
Process finished with exit code 0
2、线程的优先级和线程让步yield() 线程的让步是通过Thread.yield()来实现的。yield()方法的作用是:暂停当前正在执行的线程对象,并执行其他线程。 要理解yield(),必须了解线程的优先级的概念。线程总是存在优先级,优先级范围在1~10之间。JVM线程调度程序是基于优先级的抢先调度机制。在大多数情况下,当前运行的线程优先级将大于或等于线程池中任何线程的优先级。但这仅仅是大多数情况。