Məqalələr

Java’da AtomicInteger nümunəsi

java-atomicinteger
Written by Mushfiq Mammadov

AtomicInteger Java`ya hələ 1.5-ci versiyada gəlməsinə baxmayaraq mən onun faydalılığını hələ təzə-təzə kəşf etməyə başlamışam. Asinxron sorğularda sayğac (counter) kimi istifadə etmək üçün çox əlverişlidir, əlavə iş görməyə – metodu yaxud bloku synchronized etməyə yaxud volatile açar sözündən istifadə etməyə ehtiyac qalmır.

AtomicInteger ilə bağlı kiçik bir kod nümunəsi hazırlayacam və orada göstərməyə çalışacam ki, biz bunu necə istifadə edə bilərik. İndi isə kodun nə iş görəcəyinə qısaca baxaq.

Tutaq ki, web servisimiz var, stress test etmək istəyirik. Bunun üçün servisə “bulk” sorğu göndərəcəyik, məsələn ardıcıl 10 min sorğu. Bu sorğuların servisə eyni anda göndərilməsini təmin etmək üçün “thread pool” istifadə edəcəyik. Və əsas məsələ qarşımızda belə bir məhdudiyyət var ki, biz servisə hər dəfə təkrarlanmayan  id (unique id) göndərməliyik. Bunun üçün sayğac (counter) yaradacağıq və bu məqsədlə də AtomicInteger istifadə edəcəyik.

Bəs AtomicInteger bizə nə üçün lazımdır, adi increment istifadə edə bilmərik?

Bizim göndərdiyimiz sorğular asinxron olduğu üçün eyni millisaniyədə də baş verə bilər və əgər biz sayğac üçün Java`da adi increment istifadə etsək (++counter) id dəyərləri təkrarlana bilər. AtomicInteger classında isə “thread safe” məsələsi nəzərə alındığından, əlavə heç nə istifadən etmədən bu class vasitəsilə çox rahat şəkildə təkrarlanmayan dəyərlər əldə edə bilərik. AtomicInteger-in faydalı metodları çoxdur, amma biz qeyd etdiyimiz məqsəd üçün incrementAndGet() metodunu istifadə edəcəyik.

Əlavə olaraq biz AtomicInteger-dən göndərdiyimiz bütün sorğulara (request) cavab (response) alıb-almadığımızı yoxlamaq üçün də istifadə edə bilərik. Bütün sorğular asinxron şəkildə icra edildiyindən “thread safe” olmayan dəyişənlə biz bunu düzgün hesablamaya bilərik. Amma AtomicInteger-lə bunu çox rahat və dəqiq şəkildə edə bilərik. Nümunəyə baxaq.

 

Github link:

https://github.com/mmushfiq/AtomicIntegerExample

 

P.S. Məqalənin üz şəkli www.journaldev.com saytına məxsusdur.

About the author

Mushfiq Mammadov

Leave a Comment

 

This site uses Akismet to reduce spam. Learn how your comment data is processed.