线程基础
2020-05-26 本文已影响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中最基础的东西,需要搞清楚线程是什么,然后知道创建线程的方式,最后要了解线程的状态转换,要明白线程处于某个状态的原因,这样也有利于排除程序中出现的问题。