线程状态的切换

Java多线程

进程与线程
Java线程



前言

上文讲述了Java的线程相关的Thread和Runnable,今天来学习线程的状态切换


一、线程的状态

线程的生命周期
  1. 新建<创建了线程的实例但是没有执行start()方法>
  2. 就绪状态<当线程有资格运行,但是调度器还没有把它选为运行状态>
  3. 运行状态
  4. 等待/阻塞/睡眠<线程处于有资格运行的状态,线程仍然是活的但是当前没有条件运行>
  5. 死亡状态<run()方法已经跑完,或者异常退出>

二、线程状态的切换

在这里插入图片描述

1.线程的创建

代码如下(示例):

ThreadB a1 =  new ThreadDemo().new ThreadB("张三");

2.由创建到可运行

代码如下(示例):

Thread thread1 = new Thread(a1);
thread1.start();

3.阻止线程的运行

睡眠sleep()方法
Thread的两个静态方法强制当前正在执行的线程休眠,sleep时间到达的时候只是将线程转换成可运行态,需要等到调度器调度启动才行,因此sleep方法中指定的时间只是线程不会运行的最小时间,不能保证睡眠时间达到就直接启用
代码如下(示例):

public void run() {
    int i = 0;
    while (true){
        Thread.sleep(1000);
        System.out.println(name+ ++i);
    }
}

让步yield()方法
Thread.yield()方法是将当前线程暂停,并且执行其他线程。
yield是将当前线程由运行态转成可执行状态,以允许相同优先级的线程获得调度的机会,但是实际上yield无法百分百达到让步的效果,因为是转换成可运行态,因此存在被线程调度程序再次选中的情况
代码如下(示例):

public void run() {
    int i = 0;
    while (true){
        Thread.yield();
        System.out.println(name+ ++i);
    }
}

join()方法

Thread.join(5000),在A线程中运行B线程的join()方法,将达到A线程需要等待B线程执行完join()方法指定的时间后才运行
代码如下(示例):

public class ThreadB implements Runnable{
        String name = "";
        public ThreadB(){

        }
        public ThreadB(String name){
            this.name = name;
        }
        @SneakyThrows
        @Override
        public void run() {
            int i = 0;
            while (true){
                Thread.yield();
                System.out.println(name+ ++i);
            }
        }
    }

    public static void main(String[] args) throws InterruptedException {
        ThreadB a1 =  new ThreadDemo().new ThreadB("张三");
        ThreadB a2 =  new ThreadDemo().new ThreadB("李四");
        Thread thread1 = new Thread(a1);
        Thread thread2 = new Thread(a2);
        thread1.start();
        thread1.join(5000);
        thread2.start();
    }

在这里插入图片描述

总结

今天学习了进程的五种状态,以及状态之间的切换
并且学习了Thread.sleep() Thread.yield() Thread.join()三种方法的使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值