الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف يمكن استخدام wait() و notify()

بدأه .S.T.A.L.K.E.R في 28 يونيو 2010 · 9 رد · 571 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هذا كود صنعته لاضع درس هنا عن كيفية استخدام wait() و notify()

لكن ليس لدي وقت حاليا لشرحه

فمن يجد بنفسه القدرة لشرحه فليتقدم

و اصلا الامر بسيط

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;

/**
 *
 * @author MErsan
 */
public class ConnectionPool extends JFrame implements ActionListener {

    JButton btn_Pick;
    JButton btn_Restore;
    JButton btn_Print;

    public ConnectionPool() {
        setSize(400, 400);
        setLayout(new FlowLayout());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        btn_Pick = new JButton("Pick");
        btn_Restore = new JButton("Restore");
        btn_Print = new JButton("Print");

        btn_Pick.addActionListener(this);
        btn_Restore.addActionListener(this);
        btn_Print.addActionListener(this);


        add(btn_Pick);
        add(btn_Restore);
        add(btn_Print);

    }

    public static void main(String args[]) {

        ConnectionPool form = new ConnectionPool();
        form.setVisible(true);
    }


    private List<TestClass> objects = createObjects();
    private Vector<TestClass> testVector = new Vector<TestClass>();

    private List<TestClass> createObjects() {
        List<TestClass> test = new ArrayList<TestClass>(5);
        for (int i = 0; i < 5; i++) {

            TestClass tc = new TestClass("Object " + i);
            test.add(tc);

        }
        System.out.println("Creating Objects Done...");
        return test;
    }

    public TestClass getObject() throws InterruptedException {
        synchronized (objects) {
            while (objects.isEmpty()) {
                System.out.println("Waiting For Available Objects...");
                objects.wait();
                System.out.println("My Code Can Runnes Here...");
            }
            System.out.println("Object Returned...");
            return objects.remove(0);
        }
    }

    public void returnObject(TestClass test) {
        synchronized (objects) {
            objects.add(test);
            System.out.println("Available Objects: " + objects.size());
            System.out.println("Restoring Object...");
            objects.notify();
        }
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == btn_Pick) {
            btn_Pick.setEnabled(false);
            new Thread(new Runnable() {

                public void run() {
                    try {
                        while (true) {
                            testVector.add(getObject());
                        }

                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                }
            }).start();
        } else if (e.getSource() == btn_Restore) {
            returnObject(testVector.elementAt(0));
            testVector.remove(0);

        } else if (e.getSource() == btn_Print) {
            System.out.println("Available Objects: " + objects.size());
        }
    }
}

public class TestClass {

    private String name;

    public TestClass(String name) {
        this.name = name;
    }
}

تم تعديل هذه المشاركة بواسطة محمد عرسان في 28 يونيو 2010 في 15:44

2
#2

ِكراااا

بس انا مش فاهمة هو بيعمل ايه

+1

00020309t.gif

1958_1963.gif
#3

الغاية منه

كيف لكائن عمل Block (توّقف) للكود حتى تتغير حالته

#4

ااااااااااه

كدة انا فهمت

جزاك الله كل خير اخى محمد

00020309t.gif

1958_1963.gif
#5

جاري النظر و الرد ...

#6
هويدي كتب:

جاري النظر و الرد ...

ياريت سريعا اخى هويدى :unsure: :unsure:

:cry: :cry: :cry:

لانى عاوز اعرف الدالتين wait() و notify()

اعتقد على حد علمى انهم مورثين من الـ Object Class

يعنى كل الinhertance tree كلها تحتوى على هذه الدوال wait() و notify()

فهما هى اذن ؟ ؟ :cry:

Software Developer
Mahmoudkelany.com


 

#7

ال wait-notify تستخدم لبناء (حل) النمط الشهير producer/consumer

#8

شكراً يا محمد على المبادرة

كتبت مقالة عنهم مسبقاً في المدونة

لمحة جافاوية 25: المساجين الخيوط والسجانين الكائنات

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#9

يااااه يا علاء, تصور نسيت إنك ليك في الأدب العربي!!

والله نسيت, مدخلتش المدونه بتاعتك و قريت فيها من فتره (الظاهر إن صورة المشرف في ذهني دائما)

#10

والله يا عم هويدي تقدر تقول أني بدعي أني لي في الأدب العربي

بحاول بطريقة أو بأخرى أني أتقمص أداء د.خالد أحمد توفيق (معجب جداً بكتاباته)

قصدك تقول صورة المشرف الي ماسك كرباج وبيضرب الغلابة الأعضاء

ماشي يا عم هويدي مقبولة منك sleep.gifsleep.gif

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

مواضيع مشابهة