在学习韩顺平老师的Java课程时,遇到一个问题。写多用户在线通信项目时,客户端使用了一个静态的HashMap来保存在本客户端启动的多个线程。我的疑问是,当在同一台电脑登录多个用户时,每登录一个用户就需要使用一个客户端,每打开一个客户端,就需要run一遍客户端的代码,每在客户端成功登录,就会有一个打上userId标签的线程加入本客户端的HashMap,那么这个静态的HashMap的内容是电脑中多个客户端所共享的吗?如果不是共享的,那么这个HashMap就没有设置的必要了。通过这个程序验证,HashMap的内容是不会给多个客户端共享的。
在IDEA打开此设置:
这样就可以运行代码并行了。右键运行多次下面的代码进行测试:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
/**
* @author Albert
* @version 1.0
* @date 2023/11/29-15:07
* @describe static成员变量在使用完全同样的代码运行起来的两个不同程序分别运行时,数据能否共享的问题。
* 在学习韩顺平老师的Java课程时,遇到一个问题。写多用户在线通信项目时,
* 客户端使用了一个静态的HashMap来保存在本机启动的多个线程。我的疑问是,当在同一台电脑登录多个用户时,
* 每打开一个客户端,就需要run一遍客户端的代码,在客户端成功登录,就会有一个线程加入HashMap,
* 这个HashMap的内容是电脑中多个客户端所共享的吗?如果不是共享的,那么这个HashMap就没有设置的必要了。
* 通过这个程序验证,HashMap的内容是不会给多个客户端共享的。
*/
public class People {
public static HashMap<String, String> hm = new HashMap<>();
public static void main(String[] args) {
while(true){
Scanner scanner = new Scanner(System.in);
System.out.print("name(把name设置为\"exit\"退出系统):");
String name = scanner.next();
System.out.print("age:");
String age = scanner.next();
hm.put(name, age);
if(name.equals("exit")){
System.out.println("退出系统");
break;
}
System.out.println("输出所有人的信息:");
Iterator iterator = hm.entrySet().iterator();
while (iterator.hasNext()) {
Object next = iterator.next();
System.out.println(next);
}
}
}
}