Rumah >Java >javaTutorial >Pengaturcaraan berbilang benang Java: penciptaan benang, penyegerakan dan komunikasi
Pengaturcaraan berbilang benang Java: penciptaan benang, penyegerakan dan komunikasi
Sebagai bahasa pengaturcaraan berorientasikan objek, Java menyokong pengaturcaraan berbilang benang dan boleh menangani isu konkurensi berbilang tugas yang kompleks. Dengan menguraikan atur cara kepada berbilang utas pelaksanaan untuk melaksanakan tugas secara serentak, pengaturcaraan berbilang benang Java boleh meningkatkan prestasi program dengan ketara.
Di Java, utas ialah laluan pelaksanaan ringan yang berkongsi memori dan sumber lain dengan utas lain. Setiap utas melaksanakan tugasnya sendiri secara bebas, tetapi utas boleh menyelaras dan berkongsi sumber melalui penyegerakan dan komunikasi.
Penciptaan utas
Terdapat dua cara untuk mencipta utas dalam Java: mewarisi kelas Thread dan melaksanakan antara muka Runnable.
Warisi kaedah kelas Thread:
public class MyThread extends Thread { public void run() { System.out.println("MyThread is running."); } }
Laksanakan kaedah antara muka Runnable:
public class MyRunnable implements Runnable{ public void run(){ System.out.println("MyRunnable is running."); } }
Kaedah permulaan thread adalah seperti berikut:
// 继承Thread类方式 Thread thread1 = new MyThread(); thread1.start(); // 实现Runnable接口方式 Thread thread2 = new Thread(new MyRunnable()); thread2.start();
Penyegerakan thread
dalam Java Dalam pengaturcaraan berbilang benang, memandangkan susunan pelaksanaan antara utas tidak dapat diramalkan, jika berbilang utas mengakses sumber yang dikongsi pada masa yang sama, masalah perlumbaan data mungkin berlaku, mengakibatkan hasil program yang salah.
Untuk memastikan penyelarasan yang betul dan perkongsian data antara benang, mekanisme penyegerakan dan kunci objek disediakan dalam Java. Mekanisme penyegerakan dilaksanakan melalui kata kunci yang disegerakkan, dan mekanisme kunci dilaksanakan melalui objek kunci di Jawa.
Berikut ialah cara menggunakan kata kunci yang disegerakkan:
public class MyCounter { private int count; public synchronized void increment() { count++; } }
Dalam kod di atas, kaedah increment()
ialah kaedah selamat benang, iaitu, hanya satu utas boleh mengakses kaedah ini pada masa yang sama.
Berikut ialah cara menggunakan objek kunci:
public class MyCounter { private int count; private final Lock lock = new ReentrantLock(); public void increment() { lock.lock(); try { count++; } finally { lock.unlock(); } } }
Dalam kod di atas, kaedah increment()
juga merupakan kaedah selamat benang Untuk memastikan keselamatan benang, anda perlu untuk mendapatkan kunci objek terlebih dahulu melalui kaedah lock()
, dan kemudian lepaskan kunci objek selepas menyelesaikan operasi.
Komunikasi benang
Keselamatan benang boleh dipastikan melalui mekanisme penyegerakan benang, tetapi dalam beberapa kes penyelarasan dan pertukaran maklumat antara benang diperlukan, dalam hal ini mekanisme komunikasi benang diperlukan. Mekanisme komunikasi benang merangkumi tiga kaedah: tunggu(), notify() dan notifyAll().
Kaedah wait() membuat utas semasa menunggu dan menetapkan status thread kepada keadaan menunggu sehingga thread lain menggunakan kaedah notify() untuk memberitahu atau masa tunggu() tamat. Kaedah
notify() membangkitkan rangkaian dalam keadaan menunggu Jika terdapat berbilang rangkaian dalam keadaan menunggu, hanya satu daripadanya boleh dipilih secara rawak untuk bangun.
Kaedah notifyAll() membangunkan semua urutan dalam keadaan menunggu, supaya berbilang rangkaian dalam keadaan menunggu boleh dijalankan pada masa yang sama.
Berikut ialah contoh komunikasi benang:
public class MyQueue { private Queue<String> queue = new LinkedList<>(); public synchronized void put(String value) { queue.add(value); notify(); } public synchronized String get() throws InterruptedException { while (queue.isEmpty()) { wait(); } return queue.remove(); } }
Dalam kod di atas, kaedah put()
menambah elemen pada baris gilir dan menggunakan kaedah notify()
untuk memberitahu urutan menunggu; kaedah get()
Kemudian tunggu elemen dalam baris gilir, dan gunakan kaedah notify()
untuk memberitahu urutan menunggu apabila elemen tersedia.
Kesimpulan
Pengaturcaraan berbilang benang dalam Java ialah tugas yang kompleks yang memerlukan reka bentuk dan pelaksanaan yang teliti untuk memastikan ketepatan dan prestasi program. Memahami penciptaan, penyegerakan dan mekanisme komunikasi benang boleh membantu anda menguasai mata teras pengaturcaraan berbilang benang di Java, dengan itu meningkatkan kualiti dan prestasi program anda.
Atas ialah kandungan terperinci Pengaturcaraan berbilang benang Java: penciptaan benang, penyegerakan dan komunikasi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!