如果像我这样的话题存在,我很抱歉。 我也很抱歉英语。 问题是什么 ?。 我总是写MultiThread服务器,我无法从客户端“同步”线程。 我决定将所有客户端线程放在HashMap中。它工作正常,因为我可以看到我的Hashmap正在成长。 客户端类将识别他从服务器获得的消息,他还会执行其他操作。 例如:
DataInputStream xyz = new DataInputStream( client.getnputStream() );
public void run()
{
while(true)
{
String msg = xyz.readUTF();
if( msg.equals("ABC") )
{
** some action **
}
else if( msg.equals("123");
{
** some action **/
}
}
}
那是一个客户端类。 在Server_Thread类中,我想要这样的想法。对象“一”将获得msg“ABC”更多的同时对象“两个”“树”....将得到msg“123”。如果对象“one”将结束他的“某个动作”,他将把msg发送到服务器,而服务器将更改对象。现在对象“one”将获得msg“123”,对象“two”将获得msg“ABC”,对象“3”....将获得msg“123”。 我认为Iterator将是一个很好的解决方案,所以在我的Server_Thread类中我写道:
DataOutputStream abc = new DataOutputStream( xxx.getOutputStream());
public void run()
{
while(true)
{
synchornized(this)
{
for( Map.Entry <String,Server_Thread> iterator : iterator.entrySet() )
{
iterator.getValue().abc.writeUTF("ABC");
others( this) ;
}
}
}
}
public void others(Server_Thread object)
{
DataOutputStream abc = new DataOutputStream( xxx.getOutputStream());
synchronized(this) {
for( Map.Entry <String,Server_Thread> iterator : iterator.entrySet() )
{
if(iterator.getValue() != object)
{
iterator.getValue().abc.writeUTF("123");
}
}
}
}
此外,代码以这种方式工作。客户“一”得到“ABC”,但如果**突然客户端“两个”将加入,客户端“一”将以这种方式获得消息: “ABC 123 ABC 123 ABC 123 ABC 123 .........”
但是客户“两个”会以这种方式得到消息:
“ABC ABC ABC ABC ABC ABC ......”
**我写了“突然”,因为客户可以在他想要的时候加入。
非常感谢您的帮助。 坏
@EDIT
我的问题是如何修复它。它应该工作(客户“一个”做一些事,因为他得到msg“ABC”,其他客户端应该等待客户端“一个”。如果他做了,他可以发送一些思考服务器eq“我做完了”然后客户端“两个” “可以做一些事情,其他人等他。但是我不能”同步“,客户线程相互混合(我认为这就是问题)。