如何在Java中將'attributes
'設置爲當前的Thread
,我想設置鍵值並在另一個地方獲取值,但是在相同的線程中。喜歡這個http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/MDC.html將屬性添加到當前的Java線程
回答
我不認爲你可以添加屬性給Java中的任何給定線程,但你可以使用一個ThreadLocal
實例來存儲每個線程的任何特殊信息。
http://download.oracle.com/javase/6/docs/api/java/lang/ThreadLocal.html
下面是@ edalorzo的答案示例代碼:
import java.util.HashMap;
import java.util.Map;
public class ThreadAttributes {
private static ThreadLocal<Map<String, String>> threadAttrs = new ThreadLocal<Map<String, String>>() {
@Override
protected Map<String, String> initialValue() {
return new HashMap<String, String>();
}
};
public static String get(String key) {
return threadAttrs.get().get(key);
}
public static void set(String key, String value) {
threadAttrs.get().put(key, value);
}
}
要使用它,只是這樣的:
ThreadAttributes.get("attribute"); //to get an attribute
ThreadAttributes.set("attribute", "toValue"); //to set an attribute
警告:如果你的應用程序創建大量線程,並且不重用他們此代碼可能會泄漏HashMap
s。
另一方面,ThreadLocal變量往往會遇到線程池的問題,因爲當從池中重新使用它時,它將被分配到與上次使用時相同的線程局部變量。因此,檢查這不是一個問題很重要。 – 2011-04-10 14:15:04
這是非常真實的。我想這實際上取決於什麼要求。如果你需要屬於任務範圍的屬性(例如'Runnable#run()'-scoped),那麼可能需要查看Google Guice框架的源代碼,它允許你限制實例的範圍。 – rodion 2011-04-12 01:11:28
- 1. 添加到當前屬性值
- 2. 將線性佈局添加到當前視圖
- 3. 如何將屬性添加到Java中的頂點屬性?
- 4. 當屬性不爲空時將屬性添加到對象
- 5. 將屬性添加到屬性
- 6. Magento將Sub屬性添加到屬性?
- 7. 將屬性添加到TTPhoto
- 8. 將屬性添加到Q_PROPERTYs
- 9. 將屬性添加到IXmlNode
- 10. 將屬性添加到TreeNode
- 11. 將屬性添加到UITableViewCell
- 12. 將屬性添加到DataColumn
- 13. 將屬性添加到BehaviorExtensionElement
- 14. 將屬性添加到wp_get_attachment_image
- 15. 將屬性添加到EventArgs
- 16. 將屬性添加到GeoJSON
- 17. TypeDescriptor.AddAttributes()取代將其添加的當前屬性INSEAD
- 18. Java爲當前線程添加進度條
- 19. 將線程遞歸添加到Java線程池
- 20. PHP/Wordpress - 將屬性添加到無序列表中的當前類別
- 21. 將當前的Date.Now添加到TimeSpan?
- 22. 將虛線屬性添加到MVC中的HtmlHelper中
- 23. 將屬性添加到FullCalendar中的eventObject
- 24. 添加@Autowire「當前線程找不到會話」
- 25. Java ArrayList將當前項添加到上一項;刪除當前項目
- 26. 將屬性添加到來自Java的Groovy對象
- 27. 將屬性添加到java中的簽名xml
- 28. 使用JAVA將屬性添加到LDAP中的現有用戶
- 29. 如何將屬性添加到Java中的現有XML元素?
- 30. Java腳本將變量的值添加到對象屬性?
這正是它在log4j MDC中完成的方式,並且在請求期間EJB事務上下文和安全上下文也以相同的方式進行 - 這是EJB禁止啓動自己的線程的原因之一。 – 2011-04-10 02:10:19