Java同時プログラミング入門と高同時面接-001
タイトル:
現在200人のユーザが同時に要求を開始し、add操作、count++を要求するたびに5000個の要求を受信している.
コード:
分析:
threadTotal=1またはthreadTotal=200では、実行するたびに結果が異なり、後者は5000になります.
単純な累積操作では、5000スレッドの同じ時間に1つのプロセスのみが実行され、200プロセスが実行された場合とは異なります.
私たちのローカルシミュレーションのようなプロセスでは、どのようにシミュレーションしても正しいので、オンラインになるとエラーが発生します.このとき、同時問題かどうかを考えなければなりません.
同時シミュレーション: PostMan:Http要求シミュレーションツール Apache Bench(AB):Apacheに付属のツールで、Webサイトのパフォーマンスをテストする JMeter:Apache組織が開発した圧力テストツール その他の資料:信号量Semaphoreのacquireとreleaseについての説明 CountDownLatchとは何ですか
現在200人のユーザが同時に要求を開始し、add操作、count++を要求するたびに5000個の要求を受信している.
コード:
@Slf4j
public class CountExample {
//
public static int clientTotal = 5000;
//
public static int threadTotal = 1;
public static long count = 0;
public static void main(String[] args) {
ExecutorService executorService = Executors.newCachedThreadPool();
final Semaphore semaphore = new Semaphore(threadTotal); // 200
for (int i = 0; i < clientTotal; i++) {
executorService.execute(new Runnable() {
@Override
public void run() {
try {
semaphore.acquire();//
add();
semaphore.release(); //
} catch (InterruptedException e) {
log.error("exception", e);
}
}
});
}
executorService.shutdown();
log.info("count:" + count);
}
private static void add() {
count++ ;
}
}
分析:
threadTotal=1またはthreadTotal=200では、実行するたびに結果が異なり、後者は5000になります.
単純な累積操作では、5000スレッドの同じ時間に1つのプロセスのみが実行され、200プロセスが実行された場合とは異なります.
私たちのローカルシミュレーションのようなプロセスでは、どのようにシミュレーションしても正しいので、オンラインになるとエラーが発生します.このとき、同時問題かどうかを考えなければなりません.
同時シミュレーション: