各位好为什么我加了synchronized好像没起到作用我在服务器端定了一个静态的hashmap用于存放客户端的ip跟socket
synchronized(HashMap.class)
{
//这段的代码是从HashMap中依次取出socket并向客户端发送命令,关闭客户端的socket连接
}synchronized(HashMap.class)
{//这代码应该是在前面的代码执行完后,再去访问HashMap关闭服务器的每个socket,最后再关闭serversocket
}但是每次执行的时候都有交替,而且后面的好像还先执行,synchronized没有起到作用请各位帮忙看一下
synchronized(HashMap.class)
{
//这段的代码是从HashMap中依次取出socket并向客户端发送命令,关闭客户端的socket连接
}synchronized(HashMap.class)
{//这代码应该是在前面的代码执行完后,再去访问HashMap关闭服务器的每个socket,最后再关闭serversocket
}但是每次执行的时候都有交替,而且后面的好像还先执行,synchronized没有起到作用请各位帮忙看一下
里边应该放你要同步的资源。而你的class是不在你的访问范围的。你试试放置你的HashMap实例。
而且 我有一个类把这两个处理部分封装起来classtest,在每个方法里面加上synchronized(this),然后再用classtest.method1();clastest.method2();调用的时候结果还是一样这究竟是怎么回事
Server server = new Server();
//向sockets中写数据这段我就省掉了
//与客户端连接 ,并将客户端的IP跟socket存入sockets中;
//客户端向服务器的数据发送完了之后,服务器向每个客户端发个指令,关闭socket连接 synchronized(Server.sockets)
{
//遍历sockets,并通过socket向每个客户端发一个关闭指令
} //发完指令后再关闭服务器端的socket
synchronized(Server.sockets)
{
//sockets,关闭socket,并将关闭的socket从sockets中移出
}
}
}
程序就是这样
中间的处理代码省掉了,因为在另外一台电脑 上
ArrayList<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
list.add("7");
list.add("8");
list.add("9");
list.add("10");
synchronized(list)
{
for(String s : list){
if(Integer.parseInt(s)/2 == 0){
System.out.println(s);
}
}
}
synchronized(list)
{
for(String s : list){
if(Integer.parseInt(s)/2 != 0){
System.out.println(s);
}
}
}
}
}
结果:
1
2
3
4
5
6
7
8
9
10两个
但是synchronized为什么在这儿不起作用,我还是不太明白
Object obj = new Object();
synchronized(obj)
{//这代码应该是在前面的代码执行完后,再去访问HashMap关闭服务器的每个socket,最后再关闭serversocket
}