sleep
sleep在线程中的使用案例:
/**
* 练习:编写一个抽取学员回答问题的程序,要求倒数三秒后输出被抽中的学员姓名
i.采用数组存储6个学员姓名
ii.生成0-5之间的随机数,确定被抽中的学员
iii.在屏幕每隔一秒,依次输出3,2,1,然后输出学员姓名
*/
public class TreadName {
public static void main(String[] args) {
String[] names={"A","B","C","D","E","F"};
Random r=new Random(5);
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 1; i <=3 ; i++) {
System.out.println("倒数"+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
HashSet<String> name = new HashSet<>();
while(name.size()<3){
name.add(names[r.nextInt(5)]);
}
for (String s : name) {
System.out.println(s);
}
}
}).start();
}
}
Thread.sleep()方法产生每隔一秒的倒数效果;
Thread.sleep(1000);
sleep在进程生命周期中的作用
在进程的生命周期中,运行态的进程(或线程)被执行sleep方法后会转为阻塞状态(挂起状态),并进去阻塞队列,当sleep方法结束后再次转为就绪状态并进入就绪队列等待cpu调用指令。
join
join:使用join方法可以阻塞调用此方法的线程,直到my线程完成后再执行。
join方法的使用案例:
主线程和子线程同时运行,满足一定条件后,让子线程先运行至结束
public class TestJion {
public static void main(String[] args) throws InterruptedException {
Thread thread=new Thread(new Run1(),"子线程");
thread.start();
for (int i = 0; i <10 ; i++) {
if(i==3){
thread.join();
}
System.out.println("主线程。。。。");
}
}
}
class Run1 implements Runnable{
@Override
public void run() {
for (int i = 0; i <10 ; i++) {
System.out.println(Thread.currentThread().getName());
}
}
}
join在进程生命周期中的作用
当主线程运行时到指定条件时,子线程调用join方法,直接阻塞主线程,而不是使主线程进入就绪状态,然后将CPU资源交给子线程来使用,至到子线程处理完毕。