Saya telah melihat goroutine Go akhir-akhir ini dan berpikir akan menyenangkan memiliki sesuatu yang serupa di Java. Sejauh saya telah mencari cara umum untuk memparalelkan pemanggilan metode adalah dengan melakukan sesuatu seperti:
final String x = "somethingelse";
new Thread(new Runnable() {
public void run() {
x.matches("something");
}
}).start();
Itu tidak terlalu elegan. Apakah ada cara yang lebih baik untuk melakukan ini? Saya membutuhkan solusi seperti itu dalam sebuah proyek jadi saya memutuskan untuk mengimplementasikan kelas pembungkus saya sendiri di sekitar pemanggilan metode async.
Saya menerbitkan kelas pembungkus saya di J-Go . Tapi saya tidak tahu apakah ini solusi yang bagus. Penggunaannya sederhana:
SampleClass obj = ...
FutureResult<Integer> res = ...
Go go = new Go(obj);
go.callLater(res, "intReturningMethod", 10); //10 is a Integer method parameter
//... Do something else
//...
System.out.println("Result: "+res.get()); //Blocks until intReturningMethod returns
atau kurang bertele-tele:
Go.with(obj).callLater("myRandomMethod");
//... Go away
if (Go.lastResult().isReady()) //Blocks until myRandomMethod has ended
System.out.println("Method is finished!");
Secara internal, saya menggunakan kelas yang mengimplementasikan Runnable dan melakukan beberapa pekerjaan Refleksi untuk mendapatkan objek metode yang benar dan menjalankannya.
Saya ingin pendapat tentang perpustakaan kecil saya dan tentang masalah membuat panggilan metode asinkron seperti ini di Java. Apakah ini aman? Apakah sudah ada cara yang lebih sederhana?