作者zeat (Lucifer)
看板java
標題[問題] Thread的同步
時間Thu Apr 16 17:34:20 2009
假設我的code是這樣:
public ThreadPractice()
{
listen();
}
private void listen()
{
Thread t = new Thread()
{
public void run()
{
while(true)
{
//傾聽各種請求
事實上這裡是DatagramPacket的receive()方法,
因為會不斷的receive, 所以希望可以將整個while(ture)
都"同步化", 一次只處理一個receive的請求, e.g. 在
判斷封包的表頭後, 在做些處理.
}
}
};
t.start();
}
請問我該如何保證, while(true)這個區塊的同步?
我試過
private synchronized void listen()
可是好像沒有...
是我理解錯誤了嗎?
--
重要的是"心"
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.64.129.167
1F:推 Puser:sync 或是 thread 只有一組 沒辦法看到效果吧? 04/17 09:20
我的問題是不知道該如何正確的"同步化"那個while(true)區塊, 因為將synchronized
加在private synchronized void listen()這, 好像也感覺不出效果@@
※ 編輯: zeat 來自: 203.64.129.167 (04/17 16:31)
2F:推 sbrhsieh:如果只有一個 thread 建構 ThreadPractice object 04/17 16:43
3F:→ sbrhsieh:就沒有什麼好談的。如果你有多個 Thread 各建構一個, 04/17 16:45
4F:→ sbrhsieh:那你要說明這些 thread 之間要怎麼合作。 04/17 16:47
5F:→ sbrhsieh:「希望可以將整個while(ture)都"同步化"」很含糊的說法 04/17 16:48
6F:推 Puser:...;receive();parseMsg();... 依序寫下來 我是覺得不用同步 04/17 16:51
可能我講的太模糊了, 其實這是個client-server的架構, server端必須無窮的接受
client的請求, 所以我才希望 一次只能有一個client 存取while(true){}這個區塊.
※ 編輯: zeat 來自: 203.64.129.167 (04/17 16:59)
7F:推 sbrhsieh:只有一個 thread 跑這個 while loop 本來就是一次處理 04/17 17:14
8F:→ sbrhsieh:處理一個 client 的請求,所有 client 送來的封包列隊 04/17 17:16
9F:→ sbrhsieh:等待被處理。 04/17 17:17
10F:推 calais007:一個Thread只能處理一個Block I/O 04/17 20:37
11F:→ calais007:若想用一個Thead處理多個I/O ..關鍵字java nio 04/17 20:39