Back to Latihan Prak 6 OOP

  • Soal 1: Lini Perakitan Pabrik

    • Deskripsi Masalah: Sebuah pabrik modern menggunakan lini perakitan otomatis untuk membuat sebuah gadget. Gadget tersebut harus melewati 5 stasiun kerja secara berurutan, dari Stasiun 1 hingga Stasiun 5. Setiap stasiun kerja direpresentasikan sebagai thread yang terpisah.

    • Tugas Anda adalah memodifikasi kelas AssemblyLine dan mengimplementasikan kelas Workstation. Gunakan mekanisme wait() dan notify() untuk memastikan gadget diproses sesuai urutan yang benar (Stasiun 1, lalu 2, lalu 3, dst.). Stasiun kerja tidak boleh bekerja di luar giliran. Seluruh akses dan modifikasi terhadap kondisi gadget (tahap perakitan) harus bersifat thread-safe menggunakan synchronized.

    • File Pendukung

    • Black-box Checker: AssemblyLineChecker.java

  • Soal 2: Pipa Pemrosesan Data

    • Deskripsi Masalah: Anda sedang membangun sebuah sistem pemrosesan data. Terdapat thread Producer yang menghasilkan paket data dan meletakkannya ke dalam DataBuffer bersama. Terdapat juga thread Consumer yang mengambil paket dari DataBuffer untuk diproses. DataBuffer memiliki kapasitas yang terbatas.

    • Tugas Anda adalah mengimplementasikan metode put dan get di kelas DataBuffer menggunakan wait() dan notify() untuk memastikan:

      1. Producer akan menunggu jika buffer penuh.
      2. Consumer akan menunggu jika buffer kosong.
      3. Thread yang menunggu akan dibangunkan dengan benar ketika keadaan buffer berubah.
    • File Pendukung

    • Black-box Checker: PipelineChecker.java

  • Soal 3: Koordinator Tugas Paralel

    • Deskripsi Masalah: Anda sedang membangun sebuah sistem yang perlu menjalankan beberapa tugas (misalnya, mengunduh beberapa berkas) secara paralel. Anda memerlukan sebuah TaskCoordinator yang memulai semua tugas dalam thread terpisah, lalu menunggu hingga semua tugas tersebut selesai sebelum melanjutkan eksekusi program utama.
    • Tugas Anda adalah mengimplementasikan logika di dalam kelas TaskCoordinator. Thread utama yang memanggil startAndAwaitCompletion() harus berhenti dan menunggu. Anda dapat menggunakan Thread.join() pada semua thread worker atau menggunakan mekanisme wait/notify dengan sebuah counter untuk melacak tugas yang sudah selesai.
    • File Pendukung
    • Black-box Checker: CoordinatorChecker.java