【发布时间】:2014-05-24 10:49:59
【问题描述】:
我正在为聊天室编写服务器并遇到以下问题。 我有添加、删除和操作用户的方法。简化后看起来像这样:
User[] users = new User[8];
public synchronized void addUser(User u) {
for (int i = 0; i < 8; i++)
if (users[i] == null)
users[i] = u;
}
public synchronized void broadcast(String s) {
for (User u: users)
u.sendMessage(s);
}
public synchronized void removeUser(User s) {
for (int i = 0; i < 8; i++)
if (users[i] == s)
users[i] = null;
}
我不确定这是否足够。我想让这个线程安全。一个例子: 我有线程 A 和 B,都可以访问这些方法。当线程 A 调用广播方法时,线程 B 应该不能使用这些方法中的任何一个。将同步修饰符放在那里就足够了吗?我知道使用它时应该小心,因为它会减慢程序的速度,因为线程必须等待,但我的程序足够小,速度并不重要。
【问题讨论】:
标签: java multithreading thread-safety synchronized