"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > ما هو الذرية في جاوة؟ فهم الذرية وسلامة الخيط في جافا

ما هو الذرية في جاوة؟ فهم الذرية وسلامة الخيط في جافا

تم النشر بتاريخ 2024-11-05
تصفح:877

What is an Atomic in Java? Understanding Atomicity and Thread Safety in Java

1. مقدمة إلى الذرية في جافا

1.1 ما هي الذرة في جاوة؟

في Java، توفر الحزمة java.util.concurrent.atomic مجموعة من الفئات التي تدعم برمجة آمنة بدون قفل على متغيرات واحدة. ويشار إلى هذه الفئات مجتمعة باسم المتغيرات الذرية. تشمل الفئات الذرية الأكثر استخدامًا AtomicInteger و AtomicLong و AtomicBoolean و AtomicReference.

تم تصميم المتغيرات الذرية بحيث يتم تحديثها ذريًا، مما يعني أن عملياتها (مثل زيادة أو تقليل أو مقارنة القيم وتحديدها) يتم تنفيذها كخطوة واحدة غير قابلة للتجزئة. وهذا يضمن عدم تمكن أي مؤشر ترابط آخر من ملاحظة المتغير في حالة متوسطة.

مثال: استخدام AtomicInteger

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicExample {
    private AtomicInteger counter = new AtomicInteger(0);

    public void incrementCounter() {
        counter.incrementAndGet();
    }

    public int getCounter() {
        return counter.get();
    }

    public static void main(String[] args) {
        AtomicExample example = new AtomicExample();

        for (int i = 0; i 



في هذا المثال، يتم استخدام AtomicInteger للحفاظ على عداد يمكن زيادته بأمان بواسطة سلاسل رسائل متعددة دون التسبب في تناقضات.

1.2 الذرية وسلامة الخيط

يشير مصطلح "الذرية" إلى العمليات التي تتم في خطوة واحدة دون إمكانية التدخل من عمليات أخرى. في سياق تعدد العمليات، هذا يعني أن تحديث المتغير يحدث كعملية الكل أو لا شيء. مع الأنواع البدائية العادية، فإن العمليات مثل الزيادة (i ) ليست ذرية، مما يعني أنه إذا حاولت عدة سلاسل رسائل تحديث نفس المتغير في وقت واحد، فقد يحدث تلف في البيانات.

مثال: العمليات غير الذرية مع الأنواع البدائية

public class NonAtomicExample {
    private int counter = 0;

    public synchronized void incrementCounter() {
        counter  ;
    }

    public int getCounter() {
        return counter;
    }

    public static void main(String[] args) {
        NonAtomicExample example = new NonAtomicExample();

        for (int i = 0; i 



على الرغم من تطبيق المزامنة، يمكن أن يؤدي هذا الأسلوب إلى اختناقات في الأداء بسبب تنافس مؤشر الترابط. ومع ذلك، تتجنب الفئات الذرية ذلك باستخدام تعليمات وحدة المعالجة المركزية ذات المستوى المنخفض لضمان الذرية دون القفل.

2. الاختلافات بين الذرات والأوليات العادية

الآن بعد أن فهمنا ما هي المتغيرات الذرية وكيف تعمل، دعونا نستكشف كيف تختلف عن الأنواع البدائية العادية من حيث الذرة وسلامة الخيط.

2.1 الذرية في البدائيات العادية مقابل الذرات

الأوليات العادية مثل int، long، boolean، وما إلى ذلك، ليست ذرية بطبيعتها. يمكن مقاطعة العمليات على هذه المتغيرات، مثل زيادة أو تعيين قيمة، بواسطة سلاسل رسائل أخرى، مما يؤدي إلى بيانات غير متناسقة أو تالفة. وفي المقابل، تضمن المتغيرات الذرية تنفيذ هذه العمليات كخطوة واحدة غير متقطعة.

مثال: حالة السباق مع الأنواع البدائية

public class RaceConditionExample {
    private int counter = 0;

    public void incrementCounter() {
        counter  ;
    }

    public static void main(String[] args) {
        RaceConditionExample example = new RaceConditionExample();

        for (int i = 0; i 



في هذا المثال، قد لا تكون قيمة العداد النهائية 1000 بسبب ظروف السباق. يمكن لخيوط متعددة الوصول إلى العداد وتعديله في وقت واحد، مما يؤدي إلى نتائج غير متوقعة.

2.2 سلامة الخيط في البدائيات العادية مقابل الذرات

تعد سلامة الخيط أحد الاعتبارات الرئيسية في البرمجة المتزامنة. تتطلب البدائيات العادية مزامنة صريحة لتكون آمنة لسلسلة العمليات، والتي يمكن أن تكون مرهقة وعرضة للخطأ. ومع ذلك، فإن الذرات بطبيعتها آمنة للترابط، لأنها توفر عمليات ذرية مدمجة.

اعتبارات الأداء

يمكن أن يؤدي استخدام المزامنة مع البدائيات العادية إلى اختناقات في الأداء بسبب الحمل الزائد للحصول على الأقفال وتحريرها. من ناحية أخرى، توفر الفئات الذرية حلاً أكثر كفاءة باستخدام خوارزميات غير قابلة للحظر لتحقيق أمان الخيط بدون أقفال.

3. الاستنتاج

توفر المتغيرات الذرية في Java طريقة قوية وفعالة للتعامل مع التزامن وضمان اتساق البيانات. إنها تختلف بشكل كبير عن الأنواع البدائية العادية من حيث الذرة وسلامة الخيوط، مما يوفر حلاً أكثر أداءً في البيئات متعددة الخيوط.

من خلال فهم مفهوم الذرات، يمكنك كتابة تعليمات برمجية متزامنة أكثر أمانًا وفعالية في Java. إذا كان لديك أي أسئلة أو كنت بحاجة إلى مزيد من التوضيح، فلا تتردد في ترك تعليق أدناه!

اقرأ المشاركات المزيد على : ما هو الذرة في جافا؟ فهم الذرية وسلامة الخيط في جافا

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/anh_trntun_4732cf3d299/what-is-an-atomic-in-java-understanding-atomicity-and-thread-safety-in-java-33a4?1 إذا كان هناك أي انتهاك يرجى الاتصال بـ Study_golang @163.comdelete
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3