重载Thread.start()

Cos*_*inO 1 java multithreading

假设我有一个扩展Thread的类.

所以从目前为止我所知道的:

  • run()直接调用时,该方法被视为普通方法,并且不会导致JVM为其创建新线程.

  • 为了让它按预期工作,start()必须调用该run()方法,然后在某些操作系统暗淡的juju魔法发生之后调用该方法.

我的问题是:

是否有人可以超载start()/run()并保持正常行为?

注意:你错误的好奇心是愚蠢的,不需要粗鲁.

Mat*_*eid 5

如果您Thread通过分别调用Thread's' startrun方法进行子类化,则可以执行此操作.但是,如果您打算将参数传递给底层代码,我建议您实现一个Runnable而不是将参数保持在其状态:

class MyRunnable implements Runnable {

    private final int a;
    private final int b;

    public MyRunnable(int a, int b) {
        this.a = a;
        this.b = b;
    }

    @Override
    public void run() {
        // do something with a and b
    }   
}
Run Code Online (Sandbox Code Playgroud)

a并且b是这个示例中的一些参数.您可以Thread在其构造函数中将实例传递给a ,然后将其传递给start它.顺便说一下,这是命令模式的一种实现.

  • +1.也让你更灵活,因为你根本不需要使用Thread,你可以使用Executors. (3认同)