2014-09-10 53 views
0

我正在寫簡單的java Tcp客戶端應用程序。連接在另一個線程中處理,我感到困惑,我如何處理主線程類中的一些函數?我應該使用特殊的靜態類嗎?或者是否有任何「調度程序」,它將處理線程之間的一些操作?Java。簡單的線程操作交換

+0

在* general *中,通過使用共享對象和正確的同步策略。 – 2014-09-10 18:59:35

回答

0
/* in main object or thread */ 
synchronized (someObject) { 
    someObject.wait(); 
} 

/* in tcp connection thread/object */ 
synchronized (someObject) { 
    someObject.notify(); 
} 
+0

這將導致主線程阻塞,直到連接線程調用notify()。如果主線程是一個UI線程,這會導致非常差的用戶體驗。 – 2014-09-10 20:17:50

+0

嗯,他說他的主要課程,我沒有把它當成他的用戶名,如果有的話。如果是這樣,他應該將他的TCP連接線程創建類分成第三個線程。然後,他的UI線程將不會被阻止。 – Motes 2014-09-10 21:22:18

+0

通常,爲TCP連接使用單獨線程的全部原因是不阻止主線程。無論它是否也是UI線程,您的方法似乎都無法爲網絡活動提供單獨的線程。 – 2014-09-10 21:27:10

0

如果你使用的鞦韆,您可以使用SwingUtilities.invokeLater(Runnable)SwingUtilities.invokeAndWait(Runnable)在事件線程上執行Runnable

如果您正在運行某個其他框架,它可能有自己的API用於將事件注入UI線程。如果您要創建一個香草AWT的應用程序,例如,你可能能夠做到這一點:

java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(event); 

其中event封裝你想有發生在UI線程上執行的操作。但是,這可能會違反許可要求。