ابزارهای پیشرفته جاوا همزمان – انجمن DEV

جاوا مجموعه ای قوی از ابزارهای همزمان را ارائه می دهد که می تواند به توسعه دهندگان کمک کند تا برنامه نویسی چند رشته ای را به طور مؤثرتری مدیریت کنند. فراتر از اصول اولیه synchronized
و volatile
کلمات کلیدی، ابزارهای پیشرفته مانند Phaser
، StampedLock
، و Exchanger
کنترل پیچیده تری بر روی هماهنگی و همگام سازی نخ ارائه می دهد.
ابزارهای پیشرفته همزمان جاوا چیست؟
ابزارهای پیشرفته همزمان جاوا بخشی از java.util.concurrent
بسته، طراحی شده برای تسهیل سناریوهای همگام سازی پیچیده و بهبود عملکرد برنامه های همزمان. این ابزارها انتزاعات سطح بالاتری را برای الگوهای همزمانی رایج ارائه می دهند و اجرای عملیات ایمن رشته را آسان تر می کنند.
ابزارهای پیشرفته همزمان کلیدی
-
فازر:
- استفاده از مورد: Phaser یک مانع هماهنگ سازی انعطاف پذیر است که می تواند برای هماهنگ کردن چندین رشته که فعالیت های مرحله ای را انجام می دهند استفاده شود.
- مثال:
import java.util.concurrent.Phaser; public class PhaserExample { public static void main(String[] args) { Phaser phaser = new Phaser(1); // Register the main thread for (int i = 0; i 3; i++) { new Thread(new Worker(phaser)).start(); } phaser.arriveAndDeregister(); // Deregister the main thread } } class Worker implements Runnable { private Phaser phaser; Worker(Phaser phaser) { this.phaser = phaser; this.phaser.register(); } @Override public void run() { System.out.println(Thread.currentThread().getName() + " working in phase 1"); phaser.arriveAndAwaitAdvance(); System.out.println(Thread.currentThread().getName() + " working in phase 2"); phaser.arriveAndAwaitAdvance(); phaser.arriveAndDeregister(); } }
-
StampedLock:
- استفاده از مورد: StampedLock یک قفل مبتنی بر قابلیت با سه حالت برای کنترل دسترسی خواندن/نوشتن است: نوشتن، خواندن و خواندن خوش بینانه.
- مثال:
import java.util.concurrent.locks.StampedLock; public class StampedLockExample { private final StampedLock lock = new StampedLock(); private int count = 0; public void increment() { long stamp = lock.writeLock(); try { count++; } finally { lock.unlockWrite(stamp); } } public int getCount() { long stamp = lock.tryOptimisticRead(); int currentCount = count; if (!lock.validate(stamp)) { stamp = lock.readLock(); try { currentCount = count; } finally { lock.unlockRead(stamp); } } return currentCount; } public static void main(String[] args) { StampedLockExample example = new StampedLockExample(); example.increment(); System.out.println("Count: " + example.getCount()); } }
-
مبدل:
- استفاده از مورد: مبدل یک نقطه همگام سازی است که در آن نخ ها می توانند اشیاء را مبادله کنند.
- مثال:
import java.util.concurrent.Exchanger; public class ExchangerExample { public static void main(String[] args) { ExchangerString> exchanger = new Exchanger(); new Thread(() -> { try { String data = "Thread 1 data"; data = exchanger.exchange(data); System.out.println("Thread 1 received: " + data); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } }).start(); new Thread(() -> { try { String data = "Thread 2 data"; data = exchanger.exchange(data); System.out.println("Thread 2 received: " + data); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } }).start(); } }
نتیجه
ابزارهای پیشرفته همزمان در جاوا ابزارهای قدرتمندی را برای مدیریت سناریوهای پیچیده چند رشته ای ارائه می دهند. با استفاده از ابزارهایی مانند Phaser
، StampedLock
، و Exchanger
، توسعه دهندگان می توانند برنامه های همزمان کارآمدتر، مقیاس پذیرتر و قابل نگهداری ایجاد کنند.