是否有可能在每次創建新線程時告訴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. JQuery - 爲每個新實例化的DOM對象執行代碼
- 2. 多線程代碼 - 力執行順序
- 3. 線程未被執行後的代碼
- 4. 在每個請求上執行代碼
- 5. 代碼(java,多線程)在一行代碼後停止執行
- 6. Java,多個線程,每次只執行一個線程
- 7. C++ boost ::線程在主線程上執行代碼?
- 8. 爲什麼GIL不允許執行線程代碼?
- 9. 線程早期執行後的代碼,爲什麼?
- 10. 更新後執行代碼
- 11. 爲批處理中的每個元素執行一些代碼
- 12. 爲ASP.NET的每個請求(aspx和cshtml)執行一些代碼
- 13. 如何在每個塊的線程數多於每個線程的線程上執行並行掃描?
- 14. 在一個線程中執行阻止代碼
- 15. 如何識別由多個線程執行的代碼段
- 16. 從另一個線程執行ruby的主線程上的代碼?
- 17. symfony 2全球路線在每一頁上執行代碼
- 18. CUDA流每個線程和庫行爲
- 19. 代碼執行流程
- 20. 每天執行一次代碼
- 21. 微軟訪問:執行子代表的每個實例代碼
- 22. 在週期性運行的線程中自動執行代碼
- 23. UI線程都運行消息泵並執行代碼?
- 24. 如何爲我的程序獲得「每行代碼的執行時間」?
- 25. 在多線程環境中並行執行每個子任務
- 26. 如何創建多個線程池(即多個執行程序,每個線程池都有一個線程)
- 27. Android線程 - 在執行所有其他線程之前執行一個線程
- 28. 執行代碼
- 29. 代碼執行
- 30. 更新/重新安裝應用程序時執行代碼
創建或開始? – aioobe 2012-07-25 08:31:51
這是創建線程時的正常行爲。對不起,但不能抵抗.. –
2012-07-25 08:36:22
你可以修改Thread類,但只有在沒有其他選項的情況下。 – 2012-07-25 09:23:30