An AtomicInteger
is used in applications such as atomically incremented counters.
Code example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
package az.mm.atomicinteger; import java.io.*; import java.nio.file.Files; import java.nio.file.Paths; import java.time.LocalTime; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; /** * * @author MM <mushfiqazeri@gmail.com> */ public class AtomicIntegerExample { private final int poolSize = 100; private final ExecutorService execService = Executors.newFixedThreadPool(poolSize); private final int numberOfRequest = 10_000; private final AtomicInteger numberOfResponse = new AtomicInteger(); private final AtomicInteger counter = new AtomicInteger(getLastNumber()); private final AtomicBoolean exit = new AtomicBoolean(); private final String fixedValue = "888888"; public static void main(String[] args) { AtomicIntegerExample exp = new AtomicIntegerExample(); exp.start(); } private void start() { new EndingCheck().start(); for (int i = 0; i < numberOfRequest; i++) { execService.execute(sendRequest(i+1)); } } private class EndingCheck extends Thread { @Override public void run() { while (!exit.get()) { try { Thread.sleep(100); } catch (InterruptedException e) { } int completed = numberOfResponse.get(); System.out.printf("\n%s/%s request are completed. \n\n", completed, numberOfRequest); if (completed == numberOfRequest) close(); } } } private Runnable sendRequest(int i) { return () -> { String id = fixedValue + counter.incrementAndGet(); // we need unique id System.out.printf("Request number: %5s | OrderId: [%s] | %s\n", i, id, LocalTime.now()); //you can call your service here numberOfResponse.incrementAndGet(); }; } private int getLastNumber() { int number = 100_000; try { String fileName = "src/main/resources/number.txt"; String lastNumber = new String(Files.readAllBytes(Paths.get(fileName))); number = Integer.parseInt(lastNumber); } catch (IOException ex) { ex.printStackTrace(); } System.out.println("Last number from file: " + number); return number; } private void saveLastNumber() { try(PrintWriter writer = new PrintWriter("src/main/resources/number.txt"); ) { int lastNumber = counter.get(); writer.print(lastNumber); System.out.println("saved last number: " + lastNumber); } catch (FileNotFoundException ex) { System.err.println("number.txt file not found"); } } private void close() { execService.shutdown(); exit.set(true); saveLastNumber(); } } |
Github link:
https://github.com/mmushfiq/AtomicIntegerExample
P.S. Featured image belong to www.journaldev.com.