是否有可能在每次創建新線程時告訴JVM(或某個適當的對象)執行給定的代碼塊?爲每個新線程執行代碼?
2
A
回答
3
這取決於你的使用情況,但你也可以做Java字節code instrumentation。然而,這通常用於測量,錯誤跟蹤,分析等,因爲它具有明顯的性能影響。
這可以用ASM做了,他們有一個tutorial上手還是先看看在引導Add Logging at Class Load Time with Java Instrumentation,他們解釋如何修改Java代碼的方式,每次輸入一個方法時,該代碼被添加和退出。
在你的情況下,你只會對特殊方法,Thread()
構造函數或調用Thread.start()
。
6
不,不使用標準Java。
看看面向方面的編程,如AspectJ。您應該可以爲Thread構造函數創建一個切點。
4
並非每次創建新線程。但是,如果使用ThreadPoolExecutor創建新線程,則可以指定一個ThreadFactory,該線程工廠可以在每次創建線程時運行特定的代碼塊。該工廠。一個簡單的例子(其中的代碼運行塊打印線程的名稱)看起來像:
public static void main(String[] args) {
ExecutorService executor = Executors.newCachedThreadPool(new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(r);
System.out.println("New thread created: " + t); //Your block of code
return t;
}
});
Runnable r = new Runnable() {
@Override
public void run() {
try {
Thread.sleep(150);
} catch (InterruptedException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
}
};
for (int i = 0; i < 5; i++) {
executor.submit(r);
}
executor.shutdown();
}
相關問題
- 1. Ruby:爲每個子類執行代碼
- 2. JQuery - 爲每個新實例化的DOM對象執行代碼
- 3. 線程未被執行後的代碼
- 4. 多線程代碼 - 力執行順序
- 5. 執行Javascript代碼在後臺線程
- 6. 執行代碼每x秒
- 7. Grails的執行代碼每個環境
- 8. 對每個請求執行代碼
- 9. 在每個請求上執行代碼
- 10. 代碼(java,多線程)在一行代碼後停止執行
- 11. scala在線代碼執行
- 12. Java,多個線程,每次只執行一個線程
- 13. 在每個Wordpress的新帖子後執行php代碼
- 14. C++ boost ::線程在主線程上執行代碼?
- 15. 爲什麼GIL不允許執行線程代碼?
- 16. 線程早期執行後的代碼,爲什麼?
- 17. 更新後執行代碼
- 18. 爲什麼這個代碼添加每次執行
- 19. 爲批處理中的每個元素執行一些代碼
- 20. IIS - 爲每個請求執行腳本/代碼片段
- 21. Rails ActionController爲每個動作執行相同的代碼
- 22. 爲ASP.NET的每個請求(aspx和cshtml)執行一些代碼
- 23. 如何在每個塊的線程數多於每個線程的線程上執行並行掃描?
- 24. 在一個線程中執行阻止代碼
- 25. vb.net停止的代碼,直到一個線程執行finshed
- 26. 如何識別由多個線程執行的代碼段
- 27. 從另一個線程執行ruby的主線程上的代碼?
- 28. symfony 2全球路線在每一頁上執行代碼
- 29. CUDA流每個線程和庫行爲
- 30. 代碼執行流程
創建或開始? – aioobe 2012-07-25 08:31:51
這是創建線程時的正常行爲。對不起,但不能抵抗.. –
2012-07-25 08:36:22
你可以修改Thread類,但只有在沒有其他選項的情況下。 – 2012-07-25 09:23:30