并发系列2-- 线程基础
Posted Cessi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发系列2-- 线程基础相关的知识,希望对你有一定的参考价值。
一、线程和进程的概念
1.进程/线程概念
进程是资源(CPU,内存空间)分配的基本单位,它是程序执行的一个实例。
线程是程序执行的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位。一个进程可以包含多个线程
2.线程进行区别
1.进程是资源分配最小单位,线程是程序执行最小单位
2.进程拥有独立地址空间,系统会建立数据表来维护独立的代码段、堆栈和数据段,开销昂贵。线程共享进程中的数据,CPU创建线程开销比进行小得多
3.线程通信更为方便。
线程通信方法:互斥量、读写锁、自旋锁、线程信号、条件变量
进程通信方法:无名管道、有名管道、信号、共享内存、消息队列、信号量无名管道、有名管道、信号、共享内存、消息队列、信号量
4.多进程有利于分布式机器的程序运行。同时多进程的程序健壮性更好,进程报错不会影响其他进程。
二、线程的状态切换
状态 | 意义 |
New-新建 | 创建后尚未启动 |
Runnable-可运行 | 正在运行/正在等待CPU时间片,对应操作系统中的Running与Ready |
Blocking-阻塞 | 等待获取一个写锁(排他锁) |
waiting-无限等待 | 1.没有设置Timeout的线程,通过wait()进入,notify退出。2.设置了超时时间的,通过join进入,执行完毕退出。3.LockSupport.park()也可进入该状态 |
timed waiting-限期等待 | 无须其他线程主动唤醒,在一定时间后会被系统自动唤醒。 |
terminated-死亡 | 任务结束活产生异常导致结束 |
三、线程使用方式
方式 | 描述 |
实现Runnable接口 | 实现run方法,通过Thead的start方法启动线程 |
实现Callable接口 | 与Runnable相比,返回值通过FutureTask封装 |
集成Thead类 | 实现run方法 |
以上是关于并发系列2-- 线程基础的主要内容,如果未能解决你的问题,请参考以下文章