熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

高級技術分析:綠色和本地線程簡單介紹

2013-11-23 19:53:48  來源: Java高級技術 

  Java
  
  There are two versions of the Java Development Kit (JDK) installed
  
  The first is the standard Java x version and the other is the new Java (x) version
  
  There are two threading types available with each of the JDKs: green and native
  
  Green threads implement user level threads and use only a single OS thread
  
  Native threads use the OSs threading system and use one OS thread per java thread
  
  The threading modes can be selected by using the green or native flags when executing java
  
  JDK Versions Available
  ================================================================================
  Flavor Version RPM Package Location (JAVA_HOME) Default thread mode
  
  java _v jdk /usr/local/jdk_v  green
  
  java _RC jdk /usr/local/jdk native
  
  Solaris 相關
  ================================================================================
  結構
  
  命令行標志
  
  jdktool [green | native] options
  
  % setenv THREADS_FLAG [green | native]
  
  缺省狀態是綠線程 如果指定了命令行標志它將覆蓋 THREADS_FLAG 環境變量的設置
  
  如何確定使用哪一種線程選項?
  
  Solaris Java 開發工具包有兩種線程處理軟件的實現
  
  缺省的線程實現叫作綠線程還可以用一種本地線程實現
  
  本地線程在某些方面優於缺省的綠線程實現這要視計算環境而定 以下是使用本地線程的某些好處
  
  如果在多處理器的環境中運行 Java 代碼則 Solaris 內核程序可在並行處理器上調度本地線程以增強性能 相比之下綠線程只在用戶級上存在且沒有被操作系統映射到多內核線程中並行機制產生的增強功能不能用綠線程來實現
  
  本地線程實現能對使用 Solaris 本地線程的 C 庫進行調用但該庫卻不能用在綠線程中虛擬機使用本地線程時它能避免某些低效率的 I/O 系統調用的重復映射但用綠線程時這些重復映射是必需的
  
  在某些場合中使用缺省的綠線程可能更恰當些 非多線程安全 (MTsafe) 的平台相關代碼可能不能與本地線程一起正確地運行
  
  一般來說如果不直接使用本地 Solaris 線程機制則需用 D_REENTRANT 選項來編譯平台相關代碼以確保它們能在線程化環境中正常運行 可能還需要用到某些 Solaris 接口的可重入版本
  
  有關 Solaris 多線程編程的專門信息可查閱Solaris 軟件開發人員問答篇的多線程編程指南該信息也可在 站點找到
  
  在綠線程下運行的代碼的線程同步錯誤可能會被隱藏而在本地線程下運行時卻可能會顯現出來如果您的代碼要在兩種不同的線程包下運行則必須考慮這種可能性
  
  如何指定選擇的線程選項?
  
  缺省狀態下 Solaris Java 開發工具包的所有工具都使用綠線程要指定使用某種本地線程可以通過設置 THREADS_FLAG 環境變量來實現
  
  % setenv THREADS_FLAG native
  
  將 THREADS_FLAG 設為 green 值即可恢復使用綠線程
  
  % setenv THREADS_FLAG green
  
  也可以用 JDK 工具中的 native 或 green 命令行標志來選擇線程選項線程標志必須是命令行上指定的第一個選項
  
  命令行標志的用法如下例所示
  
  % java native mypkgMyClass
  
  % appletviewer green l
  
  命令行標志覆蓋 THREADS_FLAG 環境變量的設置
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27632.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.