多线程基础——线程概念、线程状态、线程操作详解

本文详细介绍了多线程的基础知识,包括程序、进程与线程的区别,线程的六种状态(NEW、RUNNABLE、TERMINATED、BLOCKED、WAITING、TIMED_WAITING),以及线程的常用操作:stop、join、yield、sleep和interrupt。此外,还讨论了线程的优先级和守护线程的概念。
摘要由CSDN通过智能技术生成

程序、进程、线程区别

概念:

程序:程序是指令和数据的有序集合,是一个静态的概念。

进程:进程是执行程序的一次执行过程,它是一个动态的概念,是系统资源分配的单位。可以将运行在内存中的exe文件理解为进程,进程是受操作系统管理的基本运行单元。

线程:线程可以理解成在进程中独立运行的子任务。比如QQ.exe运行时,就有很多子任务同时运行。每一项任务可以理解成“线程”在工作,这样做的优势是最大限度地利用CPU的空闲时间来处理其他任务。

总结:

在操作系统中运行的程序就是进程,比如微信、游戏、IDE等等。一个进程可以有多个线程,如视频中可以同时听声音、看图像、看弹幕等等。

线程的状态

在这里插入图片描述
1.NEW表示线程创建成功,在new Thread之后,没有start之前,线程的状态都是NEW;

2.RUNNABLE表示线程正在运行中,运行start方法,子线程被创建成功,子线程的状态变为RUNNABLE;

3.TERMINATED表示线程已经运行结束了,子线程运行完成、被打断、被中止,状态都会从RUNNABLE变为TERMINATED;

4.BLOCKED表示阻塞的意思,如果线程正好在等待获得monitor lock锁,比如在等待进入synchronized修饰的代码块或方法时,会从RUNNABLE变成BLOCKED;

5.WAITING和TIMED_WAITING相似,表示在遇到Object.wait、Thread.join、LockSupport.park这些方法时,线程会等待另一个线程执行完特定的动作之后,才能结束等待,区别是TIMED_WAITING是带有等待时间的。

这6种状态并不是线程的全部状态,不过Java线程的处理方法都是围绕这6种状态的。很多属性,子线程都是直接继承父线程的,包括优先性、守护线程、inheritableThreadLocals 里面的值等等。

线程操作

1.线程停止—stop()

要点:

(1)不推荐JDK提供的stop()、destroy()方法;

(2)推荐线程自己停止下来;

(3)建议使用一个标志位进行终止变量,当flag=false,则终止线程运行。

案例:

public class TestStop implements  Runnable{
   
    //1.设置一个标志位
    private boolean flag = true;
    
    @Override
    public void run() {
   
        int i = 0;
        while (flag){
   
            System.out.println("Thread is running......");
        }
    }

    //让线程停止
    public void stop(){
   
        this.flag = false;
        System.out.println("线程结束........");
    }

    public static void main(String[] args) {
   
        TestStop testStop = new TestStop();

        for (int i = 0;i < 2000;i ++){
   
            System.out.println("main is running......" + i);
            if(i == 1888){
   
                testStop.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值