JAVA线程1 线程基础及线程状态

线程与进程?

线程是指程序在执行过程中,能够执行程序代码的一个执行单元。

线程的状态4种:运行、就绪、挂起、结束。

进程是指一段正在执行的程序。

一个进程可以拥有多个线程,各个线程之间共享程序的内存空间(代码段、数据段、堆空间)、进程级资源(比如文件),但是各个线程拥有自己的栈空间。

 

使用多线程的好处?

使用多线程可以减少程序的响应时间。

与进程相比,线程的创建和切换开销更小。

多CPU或多核计算机本身就具有执行多线程的能力。

使用多线程能简化程序的结构,使程序便于理解和维护。一个复杂的进程可以分为多个线程来执行。

 

线程的状态?

1.新建(New):创建后尚未启动的线程的状态

2.运行(Runnable):包含Running和Ready

3.无限期等待(Waiting):不会被分配CPU执行时间,需要显式被唤醒

   没有设置Timeout参数的Object.wait()方法。

   没有设置Timeout参数的Thread.join()方法。

   LockSupport.park()方法。

4.限期等待(Timed Waiting):在一定时间后会由系统自动唤醒

   Thread.sleep()方法。

   设置了Timeout参数的Object.wait()方法。

   设置了Timeout参数的Thread.join()方法。

   LockSupport.parkNanos()方法。

   LockSupport.parkUnitil()方法。

5.阻塞(Blocked):等待获取排它锁

6.结束(Terminated):已终止线程的状态,线程已经结束执行

注意:

在线程run方法执行完后,线程已经处于结束状态,线程不可以再被唤醒

如果这个时候又调用线程的start方法,将会报错

 

线程状态之间的转换

1.新建->可运行:执行t.start()

2.可运行->运行:线程被os选中

3.运行->死亡: run()、main()方法结束;异常退出

4.运行->阻塞:等待用户输入、Thread.sleep()

5.阻塞->可运行:用户输入完成、Thread.sleep()时间结束

6.运行->等待队列:o.wait() 

7.等待队列->锁池:synchronized(o);被其他线程唤醒:o.notify()或o.notifyAll()

8.锁池->可运行:获得锁标识

9.运行->可运行:CPU时间片用完;Thread.yield()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章