有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

并发服务器的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) 个答案

  1. # 1 楼答案

    您可能需要使用锁定机制。因为这是一个家庭作业,我想指出Oracle Tutorial