作者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