2014-01-23 45 views
0

我是駱駝新手,我試圖理解它是如何工作的。爲什麼在主線程中需要運行駱駝示例

我嘗試下面的例子:

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);刪除評論,然後它工作正常。

任何人都可以解釋爲什麼需要睡在主線程?

+0

你的意思的啓動方法的Javadoc,它正常工作時'的Thread.sleep(50000); '沒有評論? – Keerthivasan

+0

「失敗」是什麼意思?另外,你是否意識到'Thread.sleep(50000)'讓程序休眠50秒?所以當你運行它時,它會在離開之前花費將近一分鐘的時間。 – Trisha

+0

@Octopus'Thread.sleep(50000);'註釋表示語句不是執行的一部分 @Trisha它無法將文件從一個位置複製到另一個位置。 –

回答

1
+0

感謝@克勞斯·易卜生我使用這個網站並正確運行示例 但這裏主類是使用和主類有HangupSupport其中有支持所以它的作品。 –

2

我認爲CamelContext作爲一個單獨的線程運行。如果你註釋掉Thread.sleep(50000);那麼contextstart()並立即stop()導致它拋出錯誤?

Thread.sleep(50000);上下文的情況下,將start()並且在主線程處於睡眠狀態,context將完成這項工作作爲產生的線程,然後stop()

+0

是@sanbhat最初我認爲,但主線程總是等待終止它的子線程 糾正我,如果我錯了 –

+0

是的..但你明確調用終止子線程的終止()。主線程中的'Thread.sleep(5000)'給出子線程的運行範圍 – sanbhat

+0

我同意sanbhat。如果您在UI(或)Web應用程序中啓動駱駝上下文,則不需要讓主線程休眠。在這裏,你正在主線睡覺,因爲你沒有任何其他工作要做。開始另一個線程(或)做一些處理。與此同時,駱駝環境將完成其工作。 – jaks