java线程之sleep与join方法

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资源交给子线程来使用,至到子线程处理完毕。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值