我可以在不调用start()方法的情况下在Java中启动线程吗?

时间:2017-04-08 17:54:10

标签: java multithreading

我可以在不调用start()方法的情况下在Java中启动线程,还是有其他机制来启动线程?

2 个答案:

答案 0 :(得分:3)

简单回答:不。

当您检查相应的java doc时,您会发现有许多方法可以处理线程的其他方面;但 start()是唯一的方法,开始执行不同线程中的代码。

当然可以致电

someThread.run()

人工;但会导致另一个OS线程并行执行代码。

如果你问“更一般”;我必须明白java.lang.Threads现在被认为是一个非常“低级”的构造。我们现在有像ExecutorService,Atomic变量,并发集合这样的东西。阅读这些内容的一个很好的起点是here。但重要的是要理解:即使使用ExecutorService;最后,当事情并行发生时,某处会有一些Thread对象;并且在某个时刻将在该对象上调用start()。没有任何级别的封闭抽象可以使该部分过时。

以防你真的在问“如何避免调用start()”;那么你可能有一个XY problem - 在这种情况下;请告诉我们更多关于你打算通过不调用start来解决的问题。

答案 1 :(得分:0)

您可以使用并发API的ExecutorService:

connectdb.Open("PROVIDER=OraOLEDB.Oracle;DATA SOURCE=DBname", "uname", "Pword")