У меня есть параллельный сервер, где пользователь выбирает опцию для отображения.Каждый раз, когда выбирается любая опция, счетчик увеличивается, отображая только сумму всех выбранных опций.Индивидуальные счетчики НЕ требуются для разных вариантов;требуется только общее количество.
После ссылки на API JAVA самым разумным методом оказалось использование атомарных целых чисел, и все работало идеально, как и ожидалось.
Я произвел следующее:
ServerProtocol.java
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:
DownloadCounter.java
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:
С помощью вышеуказанного метода, когда 2 или клиенты запрашивают опцию одновременно, переменная yourCounter увеличивается только один раз.Я ожидаю, что только одному клиенту предоставляется доступ к переменной одновременно, чтобы счетчик оставался точным.Есть идеи?
Заранее спасибо.