在新线程中运行Java静态方法

3

我刚开始学习Java,遇到了一个涉及线程的小问题。我有一个静态方法,希望能在它自己的线程中运行,这可行吗?在Python中,我知道它看起来像这样:import thread;thread.start_new_thread( my_function, () ); 我也知道如何使用Runnable实现或扩展Thread来使用非静态方法的线程,但这不是我想做的。


1
实现Runnable并不意味着您不能从Runnable内部调用静态方法。只需创建一个匿名类,该类实现Runnable并在其run方法中调用静态方法即可。 - Chris Hayes
1
对不起,我是Java的新手,你能发一个例子吗? - 735Tesla
4个回答

9
让一个线程的run方法调用静态方法:
new Thread(Call::yourStaticMethod).start();

2
上述代码将创建一个在另一个线程中执行的静态方法:
public static void yourStaticMethod() {
    new Thread(new Runnable(){
        // This happens inside a different Thread
    }).start();
}

每次调用静态方法都会创建一个新的线程,这样不好吧? - emory
实际上,每次调用静态方法时,这将创建一个新的线程!魔法词“new”)) - Atamyrat Babayev

2

你需要创建一个新的线程。(据我所知)

Thread t = new Thread(){
@Override
public void run(){ 
method();
}
static void method(){// do stuff
}
} 
//finally
t.start();

您可以在方法中创建一个类并向线程传递更多的参数。

不需要使用Runnable来包装Thread。使用您喜欢的任何一种方式,这是相同的事情!

该方法是否是静态的对此处的重要性很小。

如果静态方法确实只使用了局部变量,没有使用对象字段或方法,则它是线程安全的。如果它访问任何对象字段或方法,则根据这些字段或方法在其他代码中用于什么,可能不是线程安全的。

您可以在静态方法内部创建一个新线程或执行其他操作。这取决于您想要做什么。


1
如果您使用的是Java 8+,您还可以使用Java lambda表达式。像这样:
new Thread(()-> MyApp.myStaticMethod()).start();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接