2013-01-24 31 views

回答

6

在java中,你有2種類型的線程,綠色線程和本地線程。

綠色和本地線程都是支持Java程序的多線程執行的機制。一些JDK發行版(如Blackdown's)包含使用任一種線程運行的選項。

本機線程使用操作系統的本機功能來管理多線程進程 - 特別是,它們使用pthread庫。當你使用本地線程運行時,內核會安排和管理組成該進程的各個線程。

綠色線程模擬多線程環境而不依賴任何本機操作系統功能。他們在管理和調度線程的用戶空間中運行代碼; Sun編寫了綠色線程以使Java能夠在沒有本地線程支持的環境中工作。

有在Linux環境中使用兩個之間的重要差別:

本地線程可以先發制人線程之間切換,在任何時間從一個正在運行的線程切換控制至非運行的線程。綠色線程僅在線程(Thread.yield(),Object.wait()等)明確放棄控制或線程執行阻止操作(read()等)時切換。

在多CPU機器上,本地線程可以通過將不同的線程分配給不同的CPU來同時運行多個線程。綠色線程只能在一個CPU上運行。

本地線程創建許多Java進程正在運行的外觀:每個線程在進程表中佔用其自己的條目。這些線程都是同一進程的線程的一個線索是,所有線程的內存大小都是相同的 - 它們都使用相同的內存。

不幸的是,這種行爲限制了Linux在Linux上的可伸縮性。進程表不是無限大,進程只能在用完系統資源或達到配置的限制之前創建有限數量的線程。

+0

非常感謝!但我已閱讀[這裏](http://en.wikipedia.org/wiki/Green_threads#Green_threads_in_the_Java_virtual_machine)。在JVM中,[5]至少在Solaris上。由於綠色線程與本地線程相比有一些限制,隨後的Java版本將它們放棄以支持本地線程。所以,自Java 1.1以來,我們一直沒有處理綠色線程,但只處理本地線程。 –