


Bagaimana untuk menyelesaikan isu komunikasi antara benang dan perkongsian data di Java
Cara menyelesaikan masalah komunikasi antara benang dan perkongsian data dalam Java
Di Java, komunikasi antara benang dan perkongsian data adalah komponen penting untuk mencapai pengaturcaraan berbilang benang. Untuk berbilang rangkaian untuk mengakses data yang dikongsi dengan selamat dan berkomunikasi dengan berkesan, kami perlu menggunakan beberapa mekanisme untuk memastikan ketekalan susunan dan data antara rangkaian. Artikel ini akan memperkenalkan beberapa komunikasi antara utas biasa dan penyelesaian perkongsian data dalam Java dan memberikan contoh kod yang sepadan.
1. Gunakan kata kunci yang disegerakkan untuk melaksanakan komunikasi antara benang dan perkongsian data
- Gunakan kaedah yang disegerakkan
Kata kunci yang disegerakkan boleh mengubah suai kaedah supaya hanya satu utas boleh memasuki kaedah untuk pelaksanaan, dan utas lain perlu untuk menunggu. Ini boleh digunakan untuk melaksanakan komunikasi dan perkongsian data antara rangkaian.
Kod sampel:
public class ThreadCommunication { private boolean flag = false; public synchronized void printNumbers() { // 线程A负责打印奇数 for (int i = 1; i <= 10; i += 2) { while (flag) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("ThreadA: " + i); flag = true; notifyAll(); } } public synchronized void printLetters() { // 线程B负责打印偶数 for (char c = 'A'; c <= 'J'; c += 2) { while (!flag) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("ThreadB: " + c); flag = false; notifyAll(); } } public static void main(String[] args) { final ThreadCommunication communication = new ThreadCommunication(); Thread threadA = new Thread(new Runnable() { @Override public void run() { communication.printNumbers(); } }); Thread threadB = new Thread(new Runnable() { @Override public void run() { communication.printLetters(); } }); threadA.start(); threadB.start(); } }
Dalam contoh di atas, dengan mengubah suai kaedah printNumbers() dan printLetters() dengan kata kunci yang disegerakkan, ketekalan pesanan dan data yang dikongsi antara utas A dan utas B dipastikan. Gunakan bendera bendera untuk mengawal pelaksanaan ganti dua utas, dan gunakan kaedah wait() dan notifyAll() untuk melaksanakan pengecualian bersama dan komunikasi benang.
- Gunakan blok disegerakkan
Kata kunci disegerakkan juga boleh mengubah suai blok kod supaya hanya satu utas boleh memasuki blok kod untuk pelaksanaan, dan utas lain perlu menunggu. Ini boleh digunakan untuk melaksanakan komunikasi dan perkongsian data antara rangkaian.
Contoh kod:
public class ThreadCommunication2 { private Object lock = new Object(); private int number = 0; public void printNumbers() { synchronized (lock) { // 线程A负责打印奇数 for (int i = 1; i <= 10; i += 2) { while (number % 2 == 0) { try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("ThreadA: " + i); number++; lock.notifyAll(); } } } public void printLetters() { synchronized (lock) { // 线程B负责打印偶数 for (char c = 'A'; c <= 'J'; c += 2) { while (number % 2 != 0) { try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("ThreadB: " + c); number++; lock.notifyAll(); } } } public static void main(String[] args) { final ThreadCommunication2 communication = new ThreadCommunication2(); Thread threadA = new Thread(new Runnable() { @Override public void run() { communication.printNumbers(); } }); Thread threadB = new Thread(new Runnable() { @Override public void run() { communication.printLetters(); } }); threadA.start(); threadB.start(); } }
Dalam contoh di atas, dengan menghias blok kod dengan kata kunci yang disegerakkan, ketekalan susunan dan data yang dikongsi antara utas A dan utas B dipastikan. Gunakan pembolehubah nombor dan objek kunci untuk mengawal pelaksanaan ganti dua utas, dan gunakan kaedah wait() dan notifyAll() untuk melaksanakan pengecualian bersama dan komunikasi benang.
2. Gunakan Lock and Condition untuk merealisasikan komunikasi antara benang dan perkongsian data
- Gunakan ReentrantLock and Condition
ReentrantLock ialah kunci mutex reentrant yang disediakan oleh Java, yang boleh digunakan untuk merealisasikan komunikasi antara benang dan perkongsian data . Condition ialah objek keadaan yang disediakan oleh ReentrantLock, yang boleh menyekat dan membangunkan benang melalui kaedah await() dan signalAll().
Kod sampel:
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class ThreadCommunication3 { private Lock lock = new ReentrantLock(); private Condition numberCondition = lock.newCondition(); private Condition letterCondition = lock.newCondition(); private int number = 0; public void printNumbers() { lock.lock(); try { // 线程A负责打印奇数 for (int i = 1; i <= 10; i += 2) { while (number % 2 == 0) { try { numberCondition.await(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("ThreadA: " + i); number++; letterCondition.signalAll(); } } finally { lock.unlock(); } } public void printLetters() { lock.lock(); try { // 线程B负责打印偶数 for (char c = 'A'; c <= 'J'; c += 2) { while (number % 2 != 0) { try { letterCondition.await(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("ThreadB: " + c); number++; numberCondition.signalAll(); } } finally { lock.unlock(); } } public static void main(String[] args) { final ThreadCommunication3 communication = new ThreadCommunication3(); Thread threadA = new Thread(new Runnable() { @Override public void run() { communication.printNumbers(); } }); Thread threadB = new Thread(new Runnable() { @Override public void run() { communication.printLetters(); } }); threadA.start(); threadB.start(); } }
Dalam contoh di atas, ketekalan susunan dan data yang dikongsi antara utas A dan utas B dicapai dengan menggunakan ReentrantLock and Condition. Gunakan pembolehubah nombor, objek kunci dan objek Keadaan untuk mengawal pelaksanaan ganti dua utas, dan sekat dan bangunkan utas melalui kaedah await() dan signalAll().
3 Gunakan kata kunci yang tidak menentu untuk berkongsi data antara utas
Kata kunci yang tidak menentu boleh digunakan untuk mengubah suai pembolehubah untuk memastikan keterlihatan pembolehubah kepada semua utas. Apabila satu utas mengubah suai nilai pembolehubah yang tidak menentu, utas lain akan segera melihat nilai terkini, sekali gus memastikan ketekalan data.
Kod sampel:
public class ThreadCommunication4 { private volatile boolean flag = false; public void printNumbers() { // 线程A负责打印奇数 for (int i = 1; i <= 10; i += 2) { while (flag) { // 空循环,等待flag为false } System.out.println("ThreadA: " + i); flag = true; } } public void printLetters() { // 线程B负责打印偶数 for (char c = 'A'; c <= 'J'; c += 2) { while (!flag) { // 空循环,等待flag为true } System.out.println("ThreadB: " + c); flag = false; } } public static void main(String[] args) { final ThreadCommunication4 communication = new ThreadCommunication4(); Thread threadA = new Thread(new Runnable() { @Override public void run() { communication.printNumbers(); } }); Thread threadB = new Thread(new Runnable() { @Override public void run() { communication.printLetters(); } }); threadA.start(); threadB.start(); } }
Dalam contoh di atas, dengan menggunakan kata kunci yang tidak menentu untuk mengubah suai pembolehubah bendera, ketekalan data yang dikongsi antara utas A dan utas B dicapai. Gunakan pembolehubah bendera untuk mengawal pelaksanaan ganti kedua-dua benang, dan tunggu nilai bendera melalui gelung kosong.
Ringkasan:
Artikel ini memperkenalkan beberapa penyelesaian biasa untuk komunikasi antara benang dan isu perkongsian data di Jawa, termasuk menggunakan kata kunci yang disegerakkan dan Kunci dan Syarat untuk mencapai komunikasi antara benang, dan menggunakan kata kunci yang tidak menentu untuk mencapai perkongsian data. Semua penyelesaian di atas boleh memastikan ketekalan susunan dan data antara berbilang rangkaian penyelesaian yang mana untuk dipilih bergantung pada keperluan dan senario tertentu. Dalam pengaturcaraan berbilang benang sebenar, adalah perlu untuk memilih penyelesaian yang sesuai mengikut situasi khusus untuk menyelesaikan masalah komunikasi antara benang dan perkongsian data, untuk memastikan ketepatan dan prestasi program.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan isu komunikasi antara benang dan perkongsian data di Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel ini membincangkan menggunakan Maven dan Gradle untuk Pengurusan Projek Java, membina automasi, dan resolusi pergantungan, membandingkan pendekatan dan strategi pengoptimuman mereka.

Artikel ini membincangkan membuat dan menggunakan perpustakaan Java tersuai (fail balang) dengan pengurusan versi dan pergantungan yang betul, menggunakan alat seperti Maven dan Gradle.

Artikel ini membincangkan pelaksanaan caching pelbagai peringkat di Java menggunakan kafein dan cache jambu untuk meningkatkan prestasi aplikasi. Ia meliputi persediaan, integrasi, dan faedah prestasi, bersama -sama dengan Pengurusan Dasar Konfigurasi dan Pengusiran PRA Terbaik

Artikel ini membincangkan menggunakan JPA untuk pemetaan objek-relasi dengan ciri-ciri canggih seperti caching dan pemuatan malas. Ia meliputi persediaan, pemetaan entiti, dan amalan terbaik untuk mengoptimumkan prestasi sambil menonjolkan potensi perangkap. [159 aksara]

Kelas kelas Java melibatkan pemuatan, menghubungkan, dan memulakan kelas menggunakan sistem hierarki dengan bootstrap, lanjutan, dan pemuat kelas aplikasi. Model delegasi induk memastikan kelas teras dimuatkan dahulu, yang mempengaruhi LOA kelas tersuai


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft