关于静态变量和多线程
时间:2011-12-07
来源:互联网
return userList.add(userName);
}
public synchronized static boolean userDelete(String userName) {
return userList.remove(userName);
}
最后我在Client 把登陆成功的用户名加到这个静态的容器里,但是我发现不管我开几个Client容器里的大小都是1,我写了几句测试代码 System.out.println(ChatServer.userAdd(jTextField1.getText()));//输出是否添加成功
System.out.println(jTextField1.getText()); //输出添加的用户名
System.out.println(ChatServer.userList.size());//输出容器的大小
System.out.println(ChatServer.userList.hashCode());//输出这个容器的哈希码
我发现我开一个client添加一个用户 容器大小是1 我又开了一个client 又添加了一个用户但容器大小还是1 且两次打印出的哈希码不同。请问这是为什么? 按我的想法 打开第二个client登陆的时候容器大小不是应该相应的变成2吗?为什么还是1呢? 好像每次都是添加给新容器的一样,可以我明明定义的是静态容器啊,这对于整个类来说不都应该是公用的吗?最后我实在是想不出 就把定义的那另个静态方法都加了锁,但结果却没有任何变化。请高手指点,谢谢了!!!
我把它抽离出来写了两个小测试类public class test {
public static List<String> userList = new LinkedList<String>();
public static void add(String str){
userList.add(str);
}
}
public class test2 {
public static void main(String[] args) {
test.add("asdasd");
test.add("weqwe");
System.out.println(test.userList.size());
}
}
然后我多次运行test2 发现结果永远都是2!这是为什么?
作者: femgyue 发布时间: 2011-12-07
作者: wuyingjielao2 发布时间: 2011-12-07
作者: femgyue 发布时间: 2011-12-07
作者: wuyingjielao2 发布时间: 2011-12-07
你第二次那个测试的例子不对
对了 你客户端是用的线程吗?
作者: wuyingjielao2 发布时间: 2011-12-07
不是多进程的话你再描述的详细一点。
作者: denvilliyankai 发布时间: 2011-12-07
聊天室一定要用到多线程啊 Server是单线程 不能支持多个Client并发访问 而聊天室有很多 Client和Server 对话 说白了就是Server要为多个Client服务 所以Server要采用多线程
作者: wuyingjielao2 发布时间: 2011-12-07
作者: huntor 发布时间: 2011-12-07
作者: wuyingjielao2 发布时间: 2011-12-07
作者: wang7535067 发布时间: 2011-12-07
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28