Katakanlah saya memiliki antrian penuh tugas yang harus saya serahkan ke layanan pelaksana. Saya ingin mereka diproses satu per satu. Cara paling sederhana yang bisa saya pikirkan adalah:
- Ambil tugas dari antrian
- Kirimkan ke pelaksana
- Panggil. Dapatkan di Masa Depan yang dikembalikan dan blokir hingga hasilnya tersedia
- Ambil tugas lain dari antrian ...
Namun, saya berusaha menghindari pemblokiran sepenuhnya. Jika saya memiliki 10.000 antrian seperti itu, yang membutuhkan tugas mereka diproses satu per satu, saya akan kehabisan ruang stack karena kebanyakan dari mereka akan berpegangan pada utas yang diblokir.
Yang saya inginkan adalah mengirimkan tugas dan memberikan panggilan balik yang dipanggil saat tugas selesai. Saya akan menggunakan notifikasi panggil itu sebagai bendera untuk mengirim tugas selanjutnya. (functionaljava dan jetlang tampaknya menggunakan algoritma non-blocking seperti itu, tetapi saya tidak dapat memahami kode mereka)
Bagaimana saya bisa melakukan itu menggunakan java.util.concurrent JDK, singkat menulis layanan pelaksana saya sendiri?
(antrian yang memberi saya tugas-tugas ini mungkin sendiri diblokir, tapi itu masalah yang harus ditangani kemudian)