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

我可以在Java中启动线程而不调用start()方法吗?,java,multithreading,Java,Multithreading,我可以在Java中启动线程而不调用start()方法吗?或者有其他机制来启动线程吗?简单回答:没有 当你检查相应的,你会发现有很多方法来处理线程的其他方面;但是start()是在不同线程中启动代码执行的唯一方法 你当然可以打电话 someThread.run() 人工操作;但这不会导致另一个OS线程并行执行代码 如果你问的是“更一般”;我们必须理解,java.lang.Threads现在被认为是一种非常“低级”的构造。我们现在有了诸如ExecutorService、原子变量、并发集合之类的东西

我可以在Java中启动线程而不调用start()方法吗?或者有其他机制来启动线程吗?

简单回答:没有

当你检查相应的,你会发现有很多方法来处理线程的其他方面;但是start()是在不同线程中启动代码执行的唯一方法

你当然可以打电话

someThread.run()
人工操作;但这不会导致另一个OS线程并行执行代码

如果你问的是“更一般”;我们必须理解,java.lang.Threads现在被认为是一种非常“低级”的构造。我们现在有了诸如ExecutorService、原子变量、并发集合之类的东西。阅读这些内容的一个很好的起点是。但要理解这一点很重要:即使在使用ExecutorService时;最后,当事情并行发生时,在某个地方会有一些线程对象;并且在某个时刻将对该对象调用
start()
。任何级别的封装抽象都不能使该部分过时


万一你真的问“如何避免调用start()”;那么你可能有一个-在这种情况下;请通过不调用start向我们详细介绍您打算解决的问题。

您可以使用并发API的ExecutorService:

    Runnable yourThread = new YourThreadClass() ;
    ExecutorService executorService = Executors.newSingleThreadExecutor() ;
            executorService.execute(yourThread);
   execytorService.shutdown();

您不想使用start()的目的是什么?您想实现什么?最好的方法是使用ExecutorService。好吧,这取决于您阅读问题的方式,它不是关于如何开始执行
Thread
对象,而是关于启动线程和/或在另一个线程中执行代码的更抽象的问题。在Java中启动/使用线程的方法有很多,例如使用并行流、
Executor
,甚至使用第三方库的Quartz.True。我相应地加强了我的回答。它将不耐烦地开始。