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秒?所以当你运行它的时候,它需要一分钟才能退出。@Octopus
Thread.sleep(50000)
commented表示语句不是@Trisha执行的一部分,它无法将文件从一个位置复制到另一个位置。您的意思是当
Thread.sleep(50000)时它工作正常吗未注释?您所说的“失败”是什么意思?另外,您是否意识到
Thread.sleep(50000)
会使程序休眠50秒?所以当你运行它的时候,它需要一分钟才能退出。@Octopus
Thread.sleep(50000)
commented表示语句不是@Trisha执行的一部分,它无法将文件从一个位置复制到另一个位置。您的意思是当
Thread.sleep(50000)时它工作正常吗未注释?您所说的“失败”是什么意思?另外,您是否意识到
Thread.sleep(50000)
会使程序休眠50秒?所以当你运行它的时候,它需要一分钟才能退出。@Octopus
Thread.sleep(50000)
commented表示语句不是@Trisha执行的一部分,它无法将文件从一个位置复制到另一个位置。您的意思是当
Thread.sleep(50000)时它工作正常吗未注释?您所说的“失败”是什么意思?另外,您是否意识到
Thread.sleep(50000)
会使程序休眠50秒?所以当你运行它的时候,它需要一分钟才能退出。@Octopus
Thread.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