سؤال

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

ولكن، إذا قمت بتشغيل مثيلتين للفئة (بشكل منفصل، بعد تشغيلها إلى ملفات جرة) حيث يفتح كل مثيل فقط مؤشر ترابط واحد، كلاهما يعمل بشكل متزامن وغرا.

أنا مقتنع الخطأ هو الطريقة التي أطبقها متعددة الخيوط.

أي اقتراحات للأشياء التي يجب البحث عنها؟ شكرا! آسف على مثال غامضة.

هل كانت مفيدة؟

المحلول

لا يمكنك افتراض أن الطبقة التعسفية آمنة للخيط.

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

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

نصائح أخرى

حسنا، إليك مثال:

public class driver {

    public static void main(String args[])
    {
        Thread x;
        Thread y;

        x = new Thread(new pow());
        y = new Thread(new pow());

        x.start();
        y.start();  
    }
}

public class pow extends Thread {

    public void run() {
        InstanceOfClassIDontControl a = new InstanceOfClassIDontControl();
                a.doVariousProcesses();
    }
}

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top