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

اختبر قدراتك في الجافا - الحلقة الثانية عشر

مغلق
بدأه Snack3r في 23 ديسمبر 2013 · 1 رد · 823 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

 

 

فهرس الحلقات.

 

الهدف من هذه الحلقة هو التعامل مع مجموعة حسابات بنكية اعتماداً على الـ threads لضمان إجراء العمليات بشكل متزامن.

الفئة Compte :

class Compte {

    private double solde, decouvert;

    public Compte(double solde, double decouvert) {
        this.solde = solde;
        this.decouvert = decouvert;
    }

    public void deposer(double montant) {
        this.solde += montant;
    }

    public void retirer(double montant) {
        if (montant + decouvert <= solde) {
            this.solde -= montant;
        }
    }

    public void imprimeHistorique() {
        System.out.println("votre solde est: " + solde);
    }
}

قم بكتابة فئة باسم ThreadCompteRetrait تسمح للزبون بسحب مبلغ معين و فئة أخرى باسم ThreadCompteDepot تسمح بتزويد الحساب.

 

 

بالتوفيق.

#2

التصحيح :

public class ThreadCompteRetrait extends Thread {

    private Compte c;
    private double retrait;

    public ThreadCompteRetrait(String name, Compte c, double retrait) {
        super(name);
        this.c = c;
        this.retrait = retrait;
    }

    @Override
    public void run() {
        synchronized (c) {
            try {
                System.out.print(this.getName() + ":avant le retrait:");
                c.imprimeHistorique();
                c.retirer(this.retrait);
                Thread.sleep(1000);
                System.out.print(this.getName() + ":apres le retrait:");
                c.imprimeHistorique();
            } catch (InterruptedException e) {
                System.out.println("depot avorte");
            }
        }
    }
}
public class ThreadCompteDepot extends Thread {

    private Compte c;
    private double depot;

    public ThreadCompteDepot(String name, Compte c, double depot) {
        super(name);
        this.c = c;
        this.depot = depot;
    }

    @Override
    public void run() {
        synchronized (c) {
            try {
                System.out.print(this.getName() + ":avant le depot: ");
                c.imprimeHistorique();
                c.deposer(this.depot);
                Thread.sleep(1000);
                System.out.print(this.getName() + ":apres le depot: ");
                c.imprimeHistorique();
            } catch (InterruptedException e) {
                System.out.println("retrait avorté");
            }
        }
    }
}
public class TestThreadsCompte {

    public static void main(String[] args) {
        Compte u = new Compte(5000, 100);
        ThreadCompteRetrait tcr = new ThreadCompteRetrait("retrait", u, 2000);
        ThreadCompteDepot tcd = new ThreadCompteDepot("depot", u, 1500);
        tcr.start();
        tcd.start();
    }
}

هذا الموضوع مغلق.

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…