我有一个问题,让说,我有这样的代码是:现在慢Java程序
public static void main(String[] args)
{
startMethod1();
startMethod2();
}
,如果startMethod1方法是非常大,需要花费大量的时间来执行它,startMethod2之前启动startMethod1已完成。 如何让这些方法一一执行?
我有一个问题,让说,我有这样的代码是:现在慢Java程序
public static void main(String[] args)
{
startMethod1();
startMethod2();
}
,如果startMethod1方法是非常大,需要花费大量的时间来执行它,startMethod2之前启动startMethod1已完成。 如何让这些方法一一执行?
startMethod2之前startMethod1已经完成启动。
这绝对不会发生。您可以启动startMethod1
中的线程,该线程可能仍在运行,因为startmethod2
开始。 startMethod2
之前不能startMethod1
除非startMethod1
电话startMethod2
如果你想等到startmethod1线程完成,你必须Thread.join()
它们或使用ExecutorService.awaitTermination()
如何使这些方法通过1执行从1开始?
就像你写的代码一样。
如果我在startmethod1中使用线程,它需要时间来执行它,startMethod2运行在相同的时间startmethod1 – user1451415 2012-07-17 14:17:44
你离开你的问题 – Bohemian 2012-07-17 14:18:27
startmethod2不能启动,即使它启动的线程没有 – 2012-07-17 14:19:08
如果您正在使用的线程,那么请改变你的代码,例如...但我假装你做了,因为另一个问题您的评论表明,你的意思是;-)
你可以看看等待()和notify()
调用wait()来告诉当前线程暂停,并通知()来唤醒它一次
这很远太模糊是一个有用的答案。 – 2012-07-17 14:15:29
更改它,现在它不应该是模糊的,我将提供一个例子在一小时或两个时,当我不着急 – 2012-07-17 14:23:18
他们已经做到了。您的方式,startMethod2
将不会开始,直到startMethod1
运行。
我的猜测是你正在使用某种缓冲的消息记录API,因此一些输出比你期望的要晚得多。可能甚至在程序结束之前不会冲洗。因此,你会得到错误的交错输出。
现在你已经告诉我们关于你的线索我会取消猜测... – djna 2012-07-17 14:20:04
我们可以在这里有一些背景吗? – mfrankli 2012-07-17 14:15:05
你在startMethod1()中启动线程吗?你是从startMethod1()调用startMethod2()吗?如果没有,我没有看到为什么startMethod2()应该在StartMethod1()返回之前启动的可能性。 Java按顺序执行命令,在startMethod1()返回 – Korgen 2012-07-17 14:16:22
之前,将不会从main方法调用startMethod2()什么是您的证据显示startMethod2()在另一个方法结束之前启动? – djna 2012-07-17 14:16:28