Java 为什么运行Camel示例需要睡在主线程上
我是骆驼队的新手,我正在努力了解它是如何工作的 我尝试了以下示例:Java 为什么运行Camel示例需要睡在主线程上,java,multithreading,apache-camel,Java,Multithreading,Apache Camel,我是骆驼队的新手,我正在努力了解它是如何工作的 我尝试了以下示例: public class CamelMainTest { public static void main(String args[]) throws Exception { CamelContext context = new DefaultCamelContext(); context.addRoutes(new RouteBuilder() {
public class CamelMainTest {
public static void main(String args[]) throws Exception {
CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder() {
public void configure() {
from("file:d:\\inbox\\json?noop=true").to("file:d:\\outbox");
}
});
context.addRoutes(getFileRoute());
context.start();
// Thread.sleep(50000);
context.stop();
}
我正在将文件从一个位置复制到另一个位置,但失败了
当我从Thread.sleep(50000)行中删除注释时代码>然后它工作正常
有人能解释为什么需要在主线程上睡眠吗?我认为CamelContext
作为一个单独的线程运行。如果你注释掉Thread.sleep(50000)代码>然后context
将start()
并立即stop()
导致它抛出错误
如果线程睡眠(50000)代码>上下文将start()
当主线程睡眠时,context
将作为派生线程完成作业,然后stop()
我认为CamelContext
将作为单独的线程运行。如果你注释掉Thread.sleep(50000)代码>然后context
将start()
并立即stop()
导致它抛出错误
如果线程睡眠(50000)代码>上下文将start()
当主线程睡眠时,context
将作为派生线程完成作业,然后stop()
我认为CamelContext
将作为单独的线程运行。如果你注释掉Thread.sleep(50000)代码>然后context
将start()
并立即stop()
导致它抛出错误
如果线程睡眠(50000)代码>上下文将start()
当主线程睡眠时,context
将作为派生线程完成作业,然后stop()
我认为CamelContext
将作为单独的线程运行。如果你注释掉Thread.sleep(50000)代码>然后context
将start()
并立即stop()
导致它抛出错误
如果线程睡眠(50000)
context将start()
,当主线程处于睡眠状态时,context
将作为派生线程完成作业,然后stop()
查看Camel网站上的此常见问题解答
以及它所指的链接,例如
并读取CamelContext API的start方法的javadoc
查看骆驼网站上的常见问题解答
以及它所指的链接,例如
并读取CamelContext API的start方法的javadoc
查看骆驼网站上的常见问题解答
以及它所指的链接,例如
并读取CamelContext API的start方法的javadoc
查看骆驼网站上的常见问题解答
以及它所指的链接,例如
并读取CamelContext API的start方法的javadoc
你的意思是当线程睡眠(50000)时它工作正常吗代码>未注释?您所说的“失败”是什么意思?另外,您是否意识到Thread.sleep(50000)
会使程序休眠50秒?所以当你运行它的时候,它需要一分钟才能退出。@OctopusThread.sleep(50000)
commented表示语句不是@Trisha执行的一部分,它无法将文件从一个位置复制到另一个位置。您的意思是当Thread.sleep(50000)时它工作正常吗代码>未注释?您所说的“失败”是什么意思?另外,您是否意识到Thread.sleep(50000)
会使程序休眠50秒?所以当你运行它的时候,它需要一分钟才能退出。@OctopusThread.sleep(50000)
commented表示语句不是@Trisha执行的一部分,它无法将文件从一个位置复制到另一个位置。您的意思是当Thread.sleep(50000)时它工作正常吗代码>未注释?您所说的“失败”是什么意思?另外,您是否意识到Thread.sleep(50000)
会使程序休眠50秒?所以当你运行它的时候,它需要一分钟才能退出。@OctopusThread.sleep(50000)
commented表示语句不是@Trisha执行的一部分,它无法将文件从一个位置复制到另一个位置。您的意思是当Thread.sleep(50000)时它工作正常吗代码>未注释?您所说的“失败”是什么意思?另外,您是否意识到Thread.sleep(50000)
会使程序休眠50秒?所以当你运行它的时候,它需要一分钟才能退出。@OctopusThread.sleep(50000)
commented means语句不是执行的一部分@Trisha它无法将文件从一个位置复制到另一个位置。是@sanbhat最初我认为是这样,但主线程总是等待其子线程的终止如果我错了请更正我是。。但您正在显式调用终止子线程的stop()
Thread.sleep(5000)
在main中为runI提供子线程作用域并与sanbhat达成一致。如果在UI(或)web应用程序中启动camel上下文,则不需要使主线程休眠。在这里,你把主线程睡眠,因为你没有任何其他工作要做。启动另一个线程(或)执行一些进程。同时,camel上下文将完成它的工作代码>然后它也无法复制fileyes@sanbhat最初我认为,但主线程总是等待其子线程的终止。如果我错了,请更正我是。。但您正在显式调用终止子线程的stop()
Thread.sleep(5000)
在main中为runI提供子线程作用域并与sanbhat达成一致。如果在UI(或)web应用程序中启动camel上下文,则不需要使主线程休眠。在这里,你把主线程睡眠,因为你没有任何其他工作要做。启动另一个线程(或)执行一些进程。M