美文网首页
线程基础

线程基础

作者: 一直在路上_求名 | 来源:发表于2020-05-26 01:59 被阅读0次

    什么是线程

    我们知道线程是CPU调度的最小单位,它是属于进程里的一个分支,一个进程是由一个或者多个线程组成的,因此一个运行的进程通常是有多个线程在同时运行着的;正是由于多个线程的存在,一个进程才能同时进行多个任务,也能更充分的利用cpu的资源。

    线程的创建方法

    在Java中线程的创建方式有三种:
    1、直接继承Thread类创建线程;
    2、实现Runnable接口创建线程;
    3、使用Callable接口和FutureTask创建线程;
    对于第一种方式,由于Java是单继承的,所以并不推荐,在实际工作中使用也少;实际使用时主要还是第二种和第三种方式,而这两种方式的区别就是Callable有返回值,并且也能处理异常,所以Callable使用得比较多一些。

    线程的状态

    在Java中线程总共分为6种状态如下图,其中比较重要的两种状态为 BLOCKED 状态和 WAITING 状态;

    BLOCKED 表示线程阻塞于锁,一般是在多线程在竞争资源的时候,由于安全性的考虑会使用 sychronized 或者显示锁来对资源进行锁定。当一个线程获取锁后,只要它没有释放该锁,那其他需要执行该资源的线程都将会被阻塞,此时则是 BLOCKED 状态了。

    WAITING 表示线程正在等待,需要等待其他线程进行通知,通知后该线程才能继续工作;一般在这种状态的线程都是由于调用了 wait 方法,这个时候线程会释放锁,然后会被加入一个条件等待队列中,只有当前线程等待的条件被通知时,该线程会再次进去就绪状态等待被操作系统调用。


    WeChatbfeec5747482d670ce59ce8c8a7677ad.png

    线程各状态的流转图


    WeChat52334341d150466ade09bcc7e3c0c623.png
    线程是Java中最基础的东西,需要搞清楚线程是什么,然后知道创建线程的方式,最后要了解线程的状态转换,要明白线程处于某个状态的原因,这样也有利于排除程序中出现的问题。

    相关文章

      网友评论

          本文标题:线程基础

          本文链接:https://www.haomeiwen.com/subject/tnmpahtx.html