Memulangkan Nilai daripada Operasi Benang
Dalam pengaturcaraan berbilang benang, interaksi antara utas selalunya memerlukan pertukaran data. Satu senario biasa cuba mendapatkan semula hasil operasi yang dilakukan dalam urutan yang berasingan.
Pertimbangkan contoh kod di bawah:
<code class="java">public void test() { Thread uiThread = new HandlerThread("UIHandler") { public synchronized void run() { int value = 2; // To be returned to test() } }; uiThread.start(); }</code>
Dalam keadaan ini, nilai diubah suai dalam yang berasingan benang (dalam kes ini, "UIHandler"). Cabarannya terletak pada mengembalikan nilai ini kepada kaedah pemanggil, yang perlu mendapatkan semula data yang diubah suai.
Memanfaatkan Keadaan Objek
Satu pendekatan untuk masalah ini ialah menggunakan keadaan objek untuk menyimpan dan mendapatkan semula data yang diperlukan. Sebagai contoh, anda boleh mencipta kelas tersuai yang melaksanakan antara muka Runnable, membenarkan ia dilaksanakan sebagai utas. Dalam kelas ini, anda boleh mempunyai medan untuk menyimpan nilai yang dikira oleh urutan:
<code class="java">public class Foo implements Runnable { private volatile int value; @Override public void run() { value = 2; } public int getValue() { return value; } }</code>
Dengan pelaksanaan ini, anda boleh memisahkan penciptaan benang dan mendapatkan semula nilai yang dikira. Berikut ialah contoh:
<code class="java">Foo foo = new Foo(); Thread thread = new Thread(foo); thread.start(); thread.join(); int value = foo.getValue(); // Retrieve the modified value</code>
Pertimbangan Utama
Adalah penting untuk ambil perhatian bahawa urutan tidak mengembalikan nilai secara asal. Dengan merujuk benang seperti kelas biasa dan meminta nilainya menggunakan kaedah seperti getValue(), anda boleh merapatkan jurang ini. Selain itu, anda harus memastikan mekanisme penyegerakan untuk menghalang keadaan perlumbaan data dan mengekalkan keselamatan benang.
Atas ialah kandungan terperinci Bagaimana untuk Mengembalikan Nilai daripada Operasi Benang di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!