我可以在不调用start()方法的情况下在Java中启动线程,还是有其他机制来启动线程?
答案 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")