當前位置:編程學習大全網 - 源碼下載 - 什麽是Java多線程

什麽是Java多線程

多線程的概念?

說起多線程,那麽就不得不說什麽是線程,而說起線程,又不得不說什麽是進程。

進程(Process)是計算機中的程序關於某數據集合上的壹次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。在早期面向進程設計的計算機結構中,進程是程序的基本執行實體;在當代面向線程設計的計算機結構中,進程是線程的容器。程序是指令、數據及其組織形式的描述,進程是程序的實體。

進程可以簡單的理解為壹個可以獨立運行的程序單位。它是線程的集合,進程就是有壹個或多個線程構成的,每壹個線程都是進程中的壹條執行路徑。

那麽多線程就很容易理解:多線程就是指壹個進程中同時有多個執行路徑(線程)正在執行。

為什麽要使用多線程?

1.在壹個程序中,有很多的操作是非常耗時的,如數據庫讀寫操作,IO操作等,如果使用單線程,那麽程序就必須等待這些操作執行完成之後才能執行其他操作。使用多線程,可以在將耗時任務放在後臺繼續執行的同時,同時執行其他操作。

2.可以提高程序的效率。

3.在壹些等待的任務上,如用戶輸入,文件讀取等,多線程就非常有用了。

缺點:

1.使用太多線程,是很耗系統資源,因為線程需要開辟內存。更多線程需要更多內存。

2.影響系統性能,因為操作系統需要在線程之間來回切換。

3.需要考慮線程操作對程序的影響,如線程掛起,中止等操作對程序的影響。

4.線程使用不當會發生很多問題。

總結:多線程是異步的,但這不代表多線程真的是幾個線程是在同時進行,實際上是系統不斷地在各個線程之間來回的切換(因為系統切換的速度非常的快,所以給我們在同時運行的錯覺)。

2.多線程與高並發的聯系。

高並發:高並發指的是壹種系統運行過程中遇到的壹種“短時間內遇到大量操作請求”的情況,主要發生在web系統集中大量訪問或者socket端口集中性收到大量請求(例如:12306的搶票情況;天貓雙十壹活動)。該情況的發生會導致系統在這段時間內執行大量操作,例如對資源的請求,數據庫的操作等。如果高並發處理不好,不僅僅降低了用戶的體驗度(請求響應時間過長),同時可能導致系統宕機,嚴重的甚至導致OOM異常,系統停止工作等。如果要想系統能夠適應高並發狀態,則需要從各個方面進行系統優化,包括,硬件、網絡、系統架構、開發語言的選取、數據結構的運用、算法優化、數據庫優化……。

而多線程只是在同/異步角度上解決高並發問題的其中的壹個方法手段,是在同壹時刻利用計算機閑置資源的壹種方式。

多線程在高並發問題中的作用就是充分利用計算機資源,使計算機的資源在每壹時刻都能達到最大的利用率,不至於浪費計算機資源使其閑置。

3.線程的創建,停止,常用方法介紹。

1.線程的創建:

線程創建主要有2種方式,壹種是繼承Thread類,重寫run方法即可;(Thread類實現了Runable接口)

另壹種則是實現Runable接口,也需要重寫run方法。

線程的啟動,調用start()方法即可。 我們也可以直接使用線程對象的run方法,不過直接使用,run方法就只是壹個普通的方法了。

其他的還有: 通過匿名內部類的方法創建;實現Callable接口。。。。。

2.線程常用方法:

currentThread()方法:該方法返回當前線程的信息 .getName()可以返回線程名稱。

isAlive()方法:該方法判斷當前線程是否處於活動狀態。

sleep()方法:該方法是讓“當前正在執行的線程“休眠指定的時間,正在執行的線程是指this.currentThread()返回的線程。

getId()方法:該方法是獲取線程的唯壹標識。

3.線程的停止:

在java中,停止線程並不簡單,不想for。。break那樣說停就停,需要壹定的技巧。

線程的停止有3種方法:

1.線程正常終止,即run()方法運行結束正常停止。

2.使用interrupt方法中斷線程。

3.使用stop方法暴力停止線程。

interrupt方法中斷線程介紹:

interrupt方法其實並不是直接中斷線程,只是給線程添加壹個中斷標誌。

判斷線程是否是停止狀態:

this.interrupted(); 判斷當前線程是否已經中斷。(判斷的是這個方法所在的代碼對應的線程,而不是調用對象對應的線程)

this.isInterrupted(); 判斷線程是否已經中斷。(誰調用,判斷誰)

註:.interrupted()與isInterrupted()的區別:

interrupted()方法判斷的是所在代碼對應的線程是否中斷,而後者判斷的是調用對象對應的線程是否停止

前者執行後有清除狀態的功能(如連續調用兩次時,第壹次返回true,則第二次會返回false)

後者沒有清除狀態的功能(兩次返回都為true)

真正停止線程的方法:

異常法:

在run方法中 使用 this.interrupted();判斷線程終止狀態,如果為true則 throw new interruptedException()然後捕獲該異常即可停止線程。

return停止線程:

在run方法中 使用 this.interrupted();判斷線程終止狀態,如果為true則return停止線程。 (建議使用異常法停止線程,因為還可以在catch中使線程向上拋,讓線程停止的事件得以傳播)。

暴力法:

使用stop()方法強行停止線程(強烈不建議使用,會造成很多不可預估的後果,已經被標記為過時)

(使用stop方法會拋出 java.lang.ThreadDeath 異常,並且stop方法會釋放鎖,很容易造成數據不壹致)

註:在休眠中停止線程:

在sleep狀態下停止線程 會報異常,並且會清除線程狀態值為false;

先停止後sleep,同樣會報異常 sleep interrupted;

4.守護線程。

希望對您有所幫助!~

  • 上一篇:html如何實現滾動文字和音樂
  • 下一篇:西安電子科技大學有哪些社團?
  • copyright 2024編程學習大全網