我在閱讀有關線程的內容,並且在很多書籍中都說Java支持語言級別的線程以及高級別的線程通過java.util.concurrent
包。語言級別的線程
這是什麼意思在語言級別支持線程?
我認爲Erlang是支持線程的語言水平語言...
我在閱讀有關線程的內容,並且在很多書籍中都說Java支持語言級別的線程以及高級別的線程通過java.util.concurrent
包。語言級別的線程
這是什麼意思在語言級別支持線程?
我認爲Erlang是支持線程的語言水平語言...
要在語言級別支持線程,意味着該語言爲多線程提供了一流的支持,而不僅僅是通過類庫提供二級支持。
在Java中,在語言級別使用和volatile
關鍵字支持線程化。使用監視器和易失性字段是相對較低級別的線程構造 - 較高級別的構造,例如通用Locks,Barriers,ThreadPools,Concurrent集合可在java.util.concurrent
包中找到,以及低級別的原子操作。
Java中的線程化不僅僅是語言中的幾個關鍵字。 Java Memory Model強制執行多線程內存訪問的結果,例如一個線程的更改對其他線程可見時。這確保正確編寫的線程程序按照預期工作,而不管底層體系結構如何(指令重新排序,緩存一致性策略等等)。
原始java類庫提供線程支持,代表一個線程java.lang.Thread
,並且自JDk 1.2,java.lang.ThreadLocal
,表示線程局部變量。原始的JDK還包含一個可執行對象的抽象概念 - java.lang.Runnable
。併發實用程序將其擴展爲Callable
和Future
,這使得創建異步結果比僅使用低級別結構進行編碼要簡單得多。
雖然可以湊合着用volatile
,和Runnable
(儘可能多的做之前,JDK 1.5)由併發utils的提供的類使編寫線程更容易和他們是正確的機率更大節目。
有java.lang.Thread中和java.util.concurrent中,其中包含了一些糖一樣semaphors,執行人,blockingQueues等
似乎(我不知道)util.concurrent中的所有類都基於java.lang.Thread,因此java.lang.Thread與java中的一樣低級別。這意味着java.util.concurrent與Thread相比是高級別的。
這表示線程上有一個程序員友好的抽象(請參閱java.lang.Thread
)。它支持與關鍵字簡單而強大的同步。它在java.util.concurrent
中也有用於線程池,併發,鎖等的很好的工具。
這意味着線程是Java語言規範的一部分,而不是C中的線程庫。
AFAIK和volatile
是Java中唯一的併發語言功能。其他一切只是一個常用的同步機制(信號量,鎖定,互斥鎖等)的包裝庫。
Java Language Specification中有一段很長的章節 - 一個強有力的指標,線程是通過語言本身來支持的。最明顯的Java語言元素是關鍵字同步和易失性。另一個支持元素是Thread
類的特殊效果:
線程由Thread類表示。用戶創建線程的唯一方法是創建此類的對象;每個線程都與這樣一個對象相關聯。當在相應的Thread對象上調用start()方法時,線程將啓動。