线程状态--线程等待

  • 线程状态:辅助线程进行调度,java中线程的状态是通过一个enum来表示的。
  1. NEW:表示Thread对象有了,PCB没有。
  2. RUNNABLE:准备就绪,正在cpu执行或者已经准备好上cpu执行。
  3. BLOCKED:等待锁,阻塞状态,暂时不上cpu。
  4. WAITING: 阻塞状态,暂时不上cpu。
  5. TIMED_WAITING:阻塞状态,暂时不上cpu。
  6. TERMINATER:线程已经结束,PCB已经销毁,但是代码中的Thread对象还在。

is Alive:线程存活,指PCB是否还存在 。上述除了NEW和TERMINATER之外,其他状态都表示线程存活。以下代码可以查看线程启动之前,线程运行中,线程结束后的状态。


public class ThreadDemo1 {
    public static void main(String[] args) {
        Thread t = new Thread() {
            @Override
            public void run() {
                for (int i = 0;i < 100;i++) {

                }
            }
        };
        System.out.println("线程启动之前: " + t.getState());
        t.start();
        while(t.isAlive()) {
            System.out.println("线程运行中: " + t.getState());
        }
        System.out.println("线程结束后:" + t.getState());
    }
}
  •  当前线程的引用:Thread.currentThread  相当于this.

public class Demo1 {
    public static void main(String[] args) {
        Thread t = new Thread("线程名字") {
            @Override
            public void run() {
                for (int i = 0;i < 10;i++) {
                    //Thread.currentThread()获取到当前线程的实例,相当于this.
                    System.out.println(Thread.currentThread().getName());
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        t.start();
    }
}
  •  Thread中的run和start方法的区别
  1. t.start();创建了一个新线程,由新线程来执行输出。
  2. t.run();普通方法调用,没有创建新的线程,代码在原线程中执行。 
  •  线程等待:线程之间并发执行,多个线程之间,谁先执行谁后执行不确定,由调度器决定,这是抢占式执行的特点,我们不能控制线程开始的先后顺序,但可以控制结束的先后顺序,这就是线程等待。使用join方法,一直阻塞到对应线程执行结束后,才会继续执行。
t1.start();
t1.join();//程序一直阻塞到t1结束
t2.start();
t2.join();
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println("主线程结束");

第二段代码适用于这种场景:要进行一个复杂计算,主线程把任务分成几份,每个线程计算自己的任务,当所有任务都被分别计算完毕之后,主线程再来收集汇总,这样就必须保证主线程是最后执行完的线程。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值