sleep()、yield()、join()、wait()/notify()、interupt()——多线程中常用的方法

一、sleep()——线程休眠

线程休眠:指的是让线程暂缓执行一下,等到了预计时间之后再恢复执行。

线程休眠会交出CPU,让CPU去执行其他的任务。sleep() 方法不会释放锁,也就是说如果当前线程持有对某个对象的锁,则即使调用sleep() 方法,其他线程也无法访问这个对象。

使程序从:运行态——>阻塞态

class MyThread implements Runnable{

    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            try {
                Thread.sleep(2000);//单位毫秒
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("当前线程:" + Thread.currentThread().getName() + "  i = " + i);
        }
    }
    public static void main(String[] args) {
        MyThread mt = new MyThread();
        new Thread(mt).start();
        new Thread(mt).start();
    }
}

通过代码运行之后观察会发现这两个线程是同时休眠的,但是并非我们所看的那样,所有的代码是依次进入到run()方法中的。 真正进入到方法的对象可能是多个,也可能是一个。进入代码的顺序可能有差异,但是总体的执行是并发执行

二、yield()——线程让步

线程让步:暂停当前正在执行的线程对象,并执行其他线程。

意思就是调用yield() 让当前线程交出CPU权限,让CPU去执行其他的线程。它跟sleep方法类似,同样不会释放锁。但是yield不能控制具体的交出CPU的时间,另外,yield方法只能让拥有相同优先级的线程有获取CPU执行时间的机会。

使程序从:运行态——>就绪态

这里有个线程优先级的概念:

线程的优先级指的是,线程的优先级越高越有可能先执行(只是有可能而已&

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值