是否有可能在每次创建新线程时告诉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