线程知识点梳理

本文详细介绍了线程的概念,包括线程在进程中的地位、优点、基本操作如启动、停止以及相关属性。线程状态的转换过程也被清晰地阐述,包括创建、就绪、运行、阻塞和结束。此外,还展示了如何在Java中通过继承Thread类或实现Runnable接口创建线程。最后,讨论了线程调度和线程间的交互方式,如通过interrupt()方法通知线程停止。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程知识点梳理

什么是线程
线程是操作系统能够进行运算调度的最小单位。
被包含在进程之中,是进程中的实际运作单位。
一条线程指的是进程中一个控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

引入线程的优点
进程间可以并发,进程内的线程间也可以并发。
系统开销变小:切换线程不用切换进程。

Thread的基本操作
1.启动线程:调用start()方法,一个线程只允许调用一次start()方法。
2.如何停止一个线程:A线程调用interrupt()方法通知B线程停止,B线程收到通知后,自行决定要何时且以何种方式停止。
3.属性相关:get/set
4.启动/停止/等待停止
5.静态方法:
Thread.currentThread() : 获取调用该方法线程对象的引用。
Thread.sleep():让线程休眠一段时间,然后再执行。或者让线程放弃CPU,等待一段时间后,重新就绪,重新排队等待分配CPU。(sleep很难精确,能做到超过要求的时间)
sleep方法放弃CPU同时放弃了抢占CPU的资格。直到某个条件满足。Thread.yield()方法放弃CPU但没有放弃抢占CPU的资格。

线程的属性
线程本质是一个调度单位。
一个JVM应用中,允许有多个线程同时运行,其中,运行main方法的最开始的线程,是一个非后台线程,一般称为主线程。
任何线程都是由另一个线程还行代码创建出来的,习惯称其位父子线程。
线程调度什么时候排到CPU是随机的,什么时候从CPU上切换下来也是随机的,无法以我们看到的方法甚至是语句为间隔。
多CPU计算机中,各个线程可占用不同的CPU
每个线程用有一个线程ID,线程控制决(TCB)
同一进程的线程切换,不会引起进程切换
不同进程的线程切换,会引起进程的切换

线程的状态

1.创建
2.就绪
3.运行
4.阻塞
5.终结

JDK中通过枚举来描述:Thread.State
查看线程状态:Thread.getState()。

线程必须占有CPU才能运行代码。
无论什么原因,一个线程现在没有CPU的话就需要先进入就绪状态,排队等待分配CPU,然后才能进入运行状态。

怎么创建一个线程
1.定义类,集成Thread类。
2.覆写该类的run方法。
3.构造该类的对象。
4.调用对象的start()方法,把线程加入就绪队列,等待调度。

public class HowToInstanceThread {
static class A extends Thread {
    @Override
    public void run() {
        System.out.println("我是A类");
    }
}

static class B implements Runnable {
    @Override
    public void run() {
        System.out.println("我是B类");
    }
}

public static void main(String[] args) {
    Thread thread;
    {
        // 1. 直接 new A 类的对象,本身就是一个 Thread 对象
        A a = new A();
        thread = a;

        thread.start();
    }

    {
        // 2. new B 类的对象,是一个 Runnable,作为任务传递给线程对象
        B b = new B();
        // thread = b; 这个不能指向
        thread = new Thread(b);

        thread.start();
    }

    {
        // 3. new A 类的对象,但把该对象,当作 Runnable 使用
        // 因为 Thread 本来就实现了 Runnable
        A a = new A();
        thread = new Thread(a);

        thread.start();
    }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值