1.join()方法
字面意思就是:让某个线程join(参加、加入)进来。
即让加入的那个线程运行,而当前正在运行的线程(调用的线程)阻塞,直到加入的线程运行完成。
一句话:谁join进来就执行谁。
没有使用join时的情况:
package ThreadDemo;
public class FirstThread extends Thread {
private int i;
@Override
public void run() {
// TODO Auto-generated method stub
for (; i < 20; i++) {
System.out.println(this.getName() + " " + i);
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName()+" "+i);
if(i == 5){
FirstThread first = new FirstThread();
first.start();
}
}
}
}
输出:
main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 10
Thread-0 0
main 11
Thread-0 1
main 12
Thread-0 2
main 13
Thread-0 3
main 14
Thread-0 4
main 15
Thread-0 5
main 16
main 17
Thread-0 6
main 18
Thread-0 7
main 19
Thread-0 8
Thread-0 9
Thread-0 10
Thread-0 11
Thread-0 12
Thread-0 13
Thread-0 14
Thread-0 15
Thread-0 16
Thread-0 17
Thread-0 18
Thread-0 19
使用join后的情况:
package ThreadDemo;
public class FirstThread extends Thread {
private int i;
@Override
public void run() {
// TODO Auto-generated method stub
for (; i < 20; i++) {
System.out.println(this.getName() + " " + i);
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName()+" "+i);
if(i == 5){
FirstThread first = new FirstThread();
first.start();
try {
first.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
输出:
main 0
main 1
main 2
main 3
main 4
main 5
Thread-0 0
Thread-0 1
Thread-0 2
Thread-0 3
Thread-0 4
Thread-0 5
Thread-0 6
Thread-0 7
Thread-0 8
Thread-0 9
Thread-0 10
Thread-0 11
Thread-0 12
Thread-0 13
Thread-0 14
Thread-0 15
Thread-0 16
Thread-0 17
Thread-0 18
Thread-0 19
main 6
main 7
main 8
main 9
main 10
main 11
main 12
main 13
main 14
main 15
main 16
main 17
main 18
main 19
2.sleep()方法
字面意思:让线程睡眠,即暂停不执行。
让当前正在执行的线程暂停一段时间,并进入阻塞状态。
在睡眠时间内,即使有CPU可以使用,也不会执行。
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
字面意思:让当前线程放弃执行。