概述:
线程:
线程是程序功能的最小单位,一个进程可以由多个线程组成,共同完成系统功能,线程共享系统分配给进程的资源。
进程:
进程是系统分配资源的最小单位,程序运行时会生成一个进程实例。
Java中的线程状态:
在 jdk1.5之后,线程的状态被明确定义在内部的枚举类中即 Java.lang.Thread.State,共分为以下5种状态:
初始态 NEW:
创建一个Thread对象,但是还未调用start()方法启动线程的状态,此时线程就初始初始状态,这个状态仅在线程创建并还未调用的时候存在,是一个不可逆的状态,即一个线程只能启动一次,即如果程序调用了两次start()方法,则会抛出异常:java.lang.IllegalThreadStateException
运行态 RUNNABLE:
在Java中,运行态也包括就绪态:
就绪态:
该状态下的线程已经获得执行任务所需要的所有资源,只需要CPU分配执行权就可以运行,所有的就绪态线程放在就绪队列里
运行态:
获得CPU执行权,正在执行的线程,同一个CPU同一时刻只有一条处于运行状态的线程
阻塞态 BLOCKED:
当一条正在执行的线程请求某一资源失败的时候,就会进入阻塞状态。而在java中,阻塞态专指请求锁失败的时候的状态,由一个阻塞队列存放所有阻塞态的线程,处于阻塞态的线程会不断的请求资源,一旦请求成功,就会进入就绪队列,等待执行。
等待态 WAITING:
当线程中调用join() wait()等方法时,当前线程进入等待状态。等待其他线程将其唤醒。也有一个等待队列用来存放所有的等待状态的线程,进入等待专挑的线程会释放锁。
超时等待态 TIMED_WAITING:
当运行中的线程,调用sleep()时,就会进入该状态,它和等待态一样,并不是获取不到资源进入的该状态,而是一种主动的进入,等待经过一段超时时间后,在返回当前线程,继续执行,sleep是不释放持有的锁。
终止态 TERMINATED:
线程执行结束的一种状态,不可逆
注:
扫描二维码关注公众号,回复:
5018273 查看本文章
- sleep()方法只是释放CPU的执行权,而不放弃持有的锁和占用的资源
- wait() notify() / notifyAll() 必须放在同一个同步块中