Thread.sleep(123);
} catch (InterruptedException e) {
e.printStackTrace();
}
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
阿三 :1
阿三 :2
阿三 :3
李四 :1
李四 :2
阿三 :4
李四 :3
李四 :4
Process finished with exit code 0
* 一个计数器,计数到100,在每个数字之间暂停1秒,每隔10个数字输出一个字符串
*
*/
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 线程睡眠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毫秒!
29 线程睡眠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()
t.setPriority(8);
t.start();
线程可以具有的最高优先级。
static int MIN_PRIORITY
线程可以具有的最低优先级。
static int NORM_PRIORITY
分配给线程的默认优先级。
t.start();
t.join();
public JoinThread(String name){
super(name);
}
public void run(){
for(int i=0; i<10; i++){
for(long k=0; k<100000000; k++){}
System.out.println(this.getName() + ": " + i);
}
}
public static void main(String[] args){
Thread t1 = new JoinThread("AA AA");
t1.start();
try{
t1.join(1000); //Join在这里~
} catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println("over");
}
}
然后输出的结果是:
AA AA: 0
AA AA: 1
over
AA AA: 2
AA AA: 3
AA AA: 4
AA AA: 5
AA AA: 6
AA AA: 7
AA AA: 8
AA AA: 9
但是如果把 t.join(1000) 改成 t.join() 的话输出结果会变成:
AA AA: 0
AA AA: 1
AA AA: 2
AA AA: 3
AA AA: 4
AA AA: 5
AA AA: 6
AA AA: 7
AA AA: 8
AA AA: 9
over
这样子就很明显了,t.join(int wait_time);后面的代码想要执行需要满足以下条件之一:
1、线程t死了;
2、等待时间超过wait_time;
如果没有指定wait_time就只能等线程t死了才行了···
hread.join();后是不是指暂停主线程,优先运行thread,当thread线程结束后,再继续主线程?
ps:我在调用thread.join之前启动的线程b,在执行完thread.join()后,b线程不受影响,继续执行,受影响的只是主线程
我感觉 join() 理解成 强行抢占资源 比较好 我觉得发生机制 在栈空间里 就像楼主画的图那样 谁调用join()谁抢占资源 先运行 要么运行完 要么设置占用资源时间