Artikel ini terutama mempelajari penggunaan penukar alat sinkronisasi utas pemrograman Java. Mari kita lihat konten spesifik di bawah ini.
Jika dua utas perlu bertukar informasi dari satu sama lain selama operasi mereka, seperti data atau ruang yang digunakan, mereka perlu menggunakan kelas Exchange. Exchanger menyediakan cara yang sangat nyaman bagi utas untuk bertukar informasi. Ini dapat berfungsi sebagai titik sinkronisasi untuk dua utas untuk bertukar objek. Hanya ketika setiap utas memasuki metode exchange () dan memberikan objek, dapat menerima objek yang diberikan ketika utas lain kembali.
Hanya dua utas yang dapat bertukar data sekaligus. Jika ada beberapa utas, hanya dua yang dapat bertukar data. Mari kita lihat contoh umum: bergandengan tangan dan kirimkan barang dengan satu lagu!
Public Class ExchangerTest {public static void main (string [] args) {executorService service = executors.newCachedThreadPool (); final Exchanger Exchanger = Exchanger baru (); // Tentukan objek Exchange untuk Exchange Data // Buka utas untuk menjalankan tugas Layanan. "Heroin"; System.out.println ("Thread" + Thread.CurrentThread (). GetName () + "Obat -obatan sedang memadamkan"); thread.sleep ((long) (Math.random ()*10000)); // Lewati data untuk ditukar dengan Metode Exchange, dan kemudian memblokir, menunggu utas lain dengan pertukarannya. (String) Exchanger.exchange (data1); System.out.println ("Thread" + thread.currentThread (). GetName () + "SWAP Heroin untuk Exchange" + Data2);} catch (Exception e) {} akhirnya {service.shutdown (); System.out.out.println ("Transaction; Jalankan Layanan Tugas.Execute (RunNable baru () {@override public void run () {coba {string data1 = "3 juta"; System.out.println ("Thread" + Thread.currentThread (). GetName () + "Take" + Data1 + "Take It Out"); thread.sleep (long) (long) (MATH. (String) Exchanger.exchange (data1); System.out.println ("Thread" + Thread.currentThread (). GetName () + "Get dengan 3 juta" + data2);} catch (Exception e) {} Akhirnya {service.shutdown (); System.out.println ("Transaction, dijalankan {servictdown (); System.out.println (" Transaction {Layanan. heroin! ");}}});}});}});}});}});}}Dari kode, saya sepertinya melihat dua orang memperdagangkan obat ... mari kita lihat bagaimana hasil transaksi:
Thread Pool-1-Thread-1 mengeluarkan heroin obat. Thread Pool-1-Thread-2 mengeluarkan 3 juta. Thread Pool-1-Thread-2 mendapatkan heroin Thread Pool-1-Thread-1 untuk pertukaran heroin sebesar 3 juta. Transaksi selesai. Ambil heroin dan lari dengan cepat!
Setelah transaksi selesai, lari dengan uang!
Itu berjalan cepat. Menilai dari hasil berjalan, itu mewujudkan pertukaran data. Ini hanya bertukar jenis data dasar. Penggunaan nyata tidak terbatas pada ini. Misalnya, kita dapat bertukar objek, yang berguna. JDK secara resmi menyebutkan aplikasi tingkat tinggi:
Gunakan penukar untuk menukar buffer antar utas, jadi saat dibutuhkan, utas yang mengisi buffer mendapatkan buffer yang baru kosong dan meneruskan buffer yang diisi ke utas yang buffer kosong.
Ini harus didasarkan pada situasi aktual. Idenya sama seperti di atas. Pada kenyataannya, Anda harus mendefinisikan kelas buffer, dan kemudian kelas buffer ini dipertukarkan di antara kedua utas tersebut. Adapun cara mengimplementasikannya di kelas, itu tergantung pada situasi aktual. Itu saja untuk penggunaan penukar ~
Di atas adalah seluruh konten artikel ini tentang analisis instance penggunaan dari penukar alat sinkronisasi utas pemrograman Java, saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!