并发服务器的java计数器
我有一个并发服务器,用户可以在其中选择显示选项。每次选择任何选项时,计数器都会递增,只显示所选所有选项的总数。不同的选项不需要单独的计数器;只需要总计
在引用JavaAPI之后,最明智的方法似乎是使用原子整数,一切都如预期的那样完美地工作
我制作了以下内容:
服务器协议。爪哇
public class ServerProtocol {
private static final int ANOTHER = 2;
private static final int OPTIONS = 3;
case OPTIONS:
if (theInput.equals("1")) {
theOutput = "computer program description here -- Another? Y or N";
DownloadCounter counter = new DownloadCounter();
counter.incrementCount();
System.out.println(counter);
TrackDownloads clientDetails = new TrackDownloads();
clientDetails.trackLocalhostAddress();
state = ANOTHER;
case ANOTHER:
下载计数器。爪哇
import java.util.concurrent.atomic.AtomicInteger;
public class DownloadCounter {
private static AtomicInteger count = new AtomicInteger(0);
public void incrementCount() {
count.incrementAndGet();
}
@Override
public String toString() {
return "Total Downloads =" + count;
}
}
问题是我的讲师转过身来说我不能使用原子整数
他们为我提供了一些代码,我必须在我的项目中包含这些代码。也就是说:
int tmp = yourCounter;
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
System.out.println("sleep interrupted");
}
yourCounter = tmp + 1;
问题是我似乎不能同时使用这个计数器。到目前为止,我已经制作了以下文件:
ServerProtocol.java
public class ServerProtocol {
private static final int ANOTHER = 2;
private static final int OPTIONS = 3;
private static int yourCounter;
case OPTIONS:
if (theInput.equals("1")) {
theOutput = "computer program description here -- Another? Y or N";
int tmp = yourCounter;
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
System.out.println("sleep interrupted");
}
yourCounter = tmp + 1;
System.out.println("Download Total " + yourCounter);
TrackDownloads clientDetails = new TrackDownloads();
clientDetails.trackLocalhostAddress();
state = ANOTHER;
case ANOTHER:
使用上述方法,当两个或多个客户端同时请求该选项时,yourCounter变量只增加一次。我希望一次只允许一个客户端访问变量,以确保计数器保持准确。有什么想法吗
提前谢谢
# 1 楼答案
您可能需要使用锁定机制。因为这是一个家庭作业,我想指出Oracle Tutorial