2010-07-22 71 views
3

我在閱讀有關線程的內容,並且在很多書籍中都說Java支持語言級別的線程以及高級別的線程通過java.util.concurrent包。語言級別的線程

這是什麼意思在語言級別支持線程?

我認爲Erlang是支持線程的語言水平語言...

回答

7

要在語言級別支持線程,意味着該語言爲多線程提供了一流的支持,而不僅僅是通過類庫提供二級支持。

在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。併發實用程序將其擴展爲CallableFuture,這使得創建異步結果比僅使用低級別結構進行編碼要簡單得多。

雖然可以湊合着用volatile,​​和Runnable(儘可能多的做之前,JDK 1.5)由併發utils的提供的類使編寫線程更容易和他們是正確的機率更大節目。

0

有java.lang.Thread中和java.util.concurrent中,其中包含了一些糖一樣semaphors,執行人,blockingQueues等
似乎(我不知道)util.concurrent中的所有類都基於java.lang.Thread,因此java.lang.Thread與java中的一樣低級別。這意味着java.util.concurrent與Thread相比是高級別的。

0

這表示線程上有一個程序員友好的抽象(請參閱java.lang.Thread)。它支持與​​關鍵字簡單而強大的同步。它在java.util.concurrent中也有用於線程池,併發,鎖等的很好的工具。

0

這意味着線程是Java語言規範的一部分,而不是C中的線程庫。

0

AFAIK​​和volatile是Java中唯一的併發語言功能。其他一切只是一個常用的同步機制(信號量,鎖定,互斥鎖等)的包裝庫。

0

Java Language Specification中有一段很長的章節 - 一個強有力的指標,線程是通過語言本身來支持的。最明顯的Java語言元素是關鍵字同步易失性。另一個支持元素是Thread類的特殊效果:

線程由Thread類表示。用戶創建線程的唯一方法是創建此類的對象;每個線程都與這樣一個對象相關聯。當在相應的Thread對象上調用start()方法時,線程將啓動。