并发与并行
并发:指两个或多个事件在同一时间段内发生。(交替执行)
并行:指两个或多个事件在同一时刻发生。(同时执行)
什么是线程,什么是进程?
所谓的线程——Thread,是计算机执行计划任务的最小单元,计算机执行的每一次任务,我们称之为作业(JOB)。
进程——process:很多线程的集合,操作系统对于应用程序的管理工具,也就是说一个进程里有很多线程,线程名可以自己给出,但是进程必须由操作系统给一个独有的进程号,这个有进程号的进程就是一系列线程任务的容器。
线程不能独立存在,有线程一定有进程,有进程至少有一个线程,
进程号(0-65535)
最小优先级1 最大优先级10
创建线程的方法
1.第一种创建线程的方法 ,继承Thread类
Thread thread = new Thread();
thread.start();
2.第二种创建线程的方法 实现Runnable接口
MyRunnable runnable = new MyRunnable(); Thread thread1 = new Thread(runnable,"第一子线程");
thread.start();
线程的一些方法
currentThread() 获取当前的线程
checkAccess 查看能不能改变当前优先级
setPriority() 设置优先级 min1-10max
getPriority() 返回此线程优先级
getId() 获取线程ID(进程给的)
isAlive() 判断线程是否还存活
isInterrupted() 是否被中断
join() 将本线程内容加载到另一个线程中继续执行直到本线程执行完成
在某一个线程里面调用另一个线程的join方法后,就是把这两个线程关到一起去,然后把其中的一个线程干掉,不让其继续执行
getState() 获得线程状态
interrupt() 中断这个线程
interrupted() 检测这个线程是否关闭,是返回true,否则返回false
isDaemon() 检测这个线程是否为守护线程
sleep() 休眠
notify() 随机找出一个等待中的线程,唤醒
notifyAll() 随机唤醒等待中的线程,一个运行完,再接着随机唤醒等待中的线程,运行完,唤醒下一个
getQueueLength() 获取等待的线程数
getHoldCOunt() 获取被锁几次
getOwner(),拥有当前锁的线程
hasQueueedThread(),查询给定线程是否在等待
isFair(),查询此锁为公平锁
isHeldByCurrentThread(),查询此锁是否当前线程持有
继承Thread,必须重写run方法
run方法里内容就是该子线程的任务
线程状态
状态 | 描述 |
---|---|
NEW | 尚未启动的线程处于此状态 |
RUNNABLE | 在Java虚拟机中执行的线程处于此状态 |
BLOCKED | 被阻塞等待监视器锁定的线程处于此状态 |
WAITING | 正在等待另一个线程执行特定动作的线程处于此状态 |
TIMED_WATING | 正在等待另一个线程执行动作达到指定等待时间的线程处于此状态 |
TERMINATED | 已退出的线程处于此状态 |
object.wait方法和Thread.sleep方法区别
wait是Object类下的,sleep是Thread类的类下
调用wait方法必须给他加上一个synchronized,调用哪个对象的wait就必须给该对象加上锁
sleep不会释放当前锁 ,wait会释放当前锁
wait(不写时间)会一直等待不动,除非notify(随机一个)唤醒;或者notifyAll(一个接一个去解决等待)
.sleep()方法可以在任何地方使用;wait()方法则只能在同步控制方法或同步控制块中使用。
线程的周期状态
图转载自:https://blog.csdn.net/pange1991