2015-01-06 43 views
0

在出色的G4P Peter Lager (aka Quark)生成的程序中,字​​經常出現,如下面的代碼片段所示,複製from here。基於這個例子,我打算在處理草圖中使用兩個窗口,主窗口中顯示經緯度和其他數據,並在第二個窗口中顯示天空中的衛星圖。主程序將設置一系列衛星數據,這些數據將被讀取以顯示在輔助窗口中。稍後,我將擴展該程序以在旅程中記錄GPS數據,並生成天空圖片和旅程的視頻。 (我已經做了在SuperBasic上辛克萊QL模擬一個類似的項目,但有,我可以處理克服缺點)解釋處理草圖中同步的Java字的使用

我看過的在Java中​​this description,但不明白爲什麼它適用於這裏。下面的草圖和其他測試,無論是否使用該單詞,似乎都運行相同的結果。

請有人可以解釋一下,​​這個單詞是否真的需要,或者隨着程序的擴展可能變得必要。包含它有什麼不利之處?

import g4p_controls.*; 

GWindow myWindow; 

    public void setup(){ 
     size(480, 320, JAVA2D); 

     G4P.messagesEnabled(false); 
     G4P.setGlobalColorScheme(GCScheme.BLUE_SCHEME); 
     G4P.setCursor(ARROW); 

     if(frame != null){ 
     frame.setTitle("Sketch Window"); 
     } 

     myWindow = new GWindow(this, "Window title", 0, 0, 240, 120, false, JAVA2D); 
     myWindow.addDrawHandler(this, "myWindowDraw"); 
    } 

    public void draw(){ 
     background(100, 230, 100); 
     fill(0); 
     text("Main WIndow", 20 ,20); 
    } 

    // public void myWindowDraw(GWinApplet appc, GWinData data) { 
    synchronized public void myWindowDraw(GWinApplet appc, GWinData data) { 
     appc.background(100,100,200); 
     appc.fill(0,0,160); 
     appc.noStroke(); 

     appc.ellipse(appc.width/2, appc.height/2, appc.width/1.2, appc.height/1.2); 
     appc.fill(255); 
     appc.text("Secondary window", 20, 20); 
    } 

回答

2

如果您的應用程序不是多線程的,則不需要使用​​。然而大多數現代處理器都是多核的,並且依靠應用程序中的多線程來實現最佳性能。如果你的應用程序不是,也不可能是高性能的,那麼你可以忽略​​。

如果在某個階段,您增強了代碼以利用多個線程,那麼您需要將其更改爲「線程安全」。現在許多程序員更願意從一開始就將線程安全性構建到他們的代碼中,以便稍後避免這種努力。對於構建將以多種不同方式使用的庫的程序員來說尤其如此。

在Java 8中,您確實有另一種選擇來利用多線程。流庫現在明確支持並行流,用於分割工作負載並在稍後組合(減少/收集)它們。如果這可能符合您對速度的需求,那麼您可以忽略同步並使用並行流來利用並行處理。例如,如果在某個階段需要處理大量GPS數據以創建視頻,則可能會有一個並行數據流生成數據,分別處理每個部分,然後再將它們組合成一張圖片。使用可以完成的流程而無需手動創建線程和線程安全。

+0

謝謝sprinter,這正是我想知道的。 –

+1

請記住:如果您在默認的Processing IDE中進行編碼,並且不使用Processing作爲核心庫(例如在Eclipse中),則代碼將轉換爲Java 4代碼,該代碼不支持添加Java 8以上所列。 – teegabel

+0

@teegabel我建議任何使用不支持Java 8的IDE的人都可以放棄它,然後轉移到其中。流是語言的一個非常好的補充。 – sprinter