Dengan pembangunan berterusan Internet, bahasa Java telah menjadi alat penting untuk pembangun. Dalam pembangunan Java, terdapat lebih banyak situasi yang melibatkan pengaturcaraan serentak. Atas sebab ini, adalah sangat perlu untuk menguasai pengetahuan asas pengaturcaraan serentak Java.
Berikut ialah pengenalan terperinci kepada pengetahuan asas pengaturcaraan serentak Java.
Benang ialah unit terkecil yang sistem pengendalian boleh melaksanakan penjadualan operasi, iaitu laluan pelaksanaan. Di Java, multi-threading adalah cara biasa untuk melaksanakan pengaturcaraan serentak.
Di Java, gunakan kelas Thread untuk mencipta dan memulakan urutan baharu. Apabila memulakan utas, anda boleh menentukan tugas yang perlu dilakukan oleh utas dengan mengatasi kaedah run() kelas Thread. Contohnya:
class RunnableThread implements Runnable { public void run() { // 线程执行任务 } } public class Main { public static void main(String[] args) { RunnableThread runnable = new RunnableThread(); Thread thread = new Thread(runnable); thread.start(); } }
Dalam kod di atas, kelas RunnableThread dicipta yang melaksanakan antara muka Runnable dan urutan baharu dicipta dalam fungsi utama dan dimulakan. Tugas utas baharu ditakrifkan oleh kaedah run() overridden.
Dalam pengaturcaraan berbilang benang, situasi yang melibatkan sumber dikongsi memerlukan penyegerakan untuk memastikan ketekalan dan ketepatan data. Java menyediakan kata kunci yang disegerakkan untuk melaksanakan kunci penyegerakan. Berikut ialah beberapa kaedah penyegerakan biasa:
Kaedah disegerakkan merujuk kepada penggunaan kata kunci disegerakkan pada pengisytiharan kaedah untuk menjadikan kaedah itu kaedah disegerakkan. Seperti yang ditunjukkan di bawah:
public synchronized void method(){ // 同步内容 }
Kaedah kaedah() dalam kod di atas ialah kaedah segerak dan urutan lain dibenarkan untuk dilaksanakan hanya selepas kaedah selesai.
Selain menggunakan kata kunci disegerakkan pada pengisytiharan kaedah, blok kod disegerakkan juga boleh digunakan untuk mencapai penyegerakan antara utas. Berikut ialah contoh menggunakan blok kod disegerakkan:
public void method(){ synchronized (this){ // 同步代码块 } }
Dalam kod di atas, blok kod disegerakkan digunakan, dan ini dalam kurungan menunjukkan bahawa objek kepunyaan kaedah itu dikunci.
Kata kunci yang tidak menentu dalam Java ialah mekanisme penyegerakan ringan yang boleh menjamin keterlihatan benang dan tahap ketertiban tertentu. Apabila pembolehubah diubah suai tidak menentu, nilai terkini dibaca dari memori setiap kali pembolehubah dibaca. Contohnya:
public volatile boolean flag = false;
Pembolehubah bendera dalam kod di atas diisytiharkan sebagai jenis yang tidak menentu, menunjukkan bahawa nilainya mungkin diubah suai oleh berbilang urutan. Dalam persekitaran berbilang benang, menggunakan kata kunci yang tidak menentu boleh memastikan ketekalan capaian benang kepada pembolehubah.
Kolam benang ialah alat pengaturcaraan berbilang benang yang sangat praktikal di Jawa, yang boleh mengurangkan overhed penciptaan dan pemusnahan benang, dan boleh mengawal dengan berkesan bilangan utas Kawalan untuk mengelakkan bilangan utas yang berlebihan daripada menyebabkan pembaziran sumber sistem. Di Jawa, kumpulan benang disediakan melalui rangka kerja Pelaksana.
Berikut ialah contoh menggunakan rangka kerja Pelaksana untuk mencipta kumpulan benang:
ExecutorService executor = Executors.newFixedThreadPool(5); for(int i = 0; i < 10; i++){ executor.execute(new RunnableThread()); } executor.shutdown();
Dalam kod di atas, kumpulan benang dengan bilangan benang tetap 5 dibuat, dan kemudian 10 tugasan diserahkan kepada pelaksana kumpulan benang. Akhir sekali, gunakan kaedah shutdown() untuk menutup kumpulan benang.
Java menyediakan banyak kelas koleksi selamat benang, seperti ConcurrentHashMap, ConcurrentLinkedQueue, dsb. Kelas pengumpulan ini boleh menyediakan operasi data yang cekap dan selamat dalam persekitaran berbilang benang.
Berikut ialah contoh penggunaan ConcurrentHashMap:
ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>(); map.put("key1", "value1"); map.put("key2", "value2"); for(Map.Entry<String, String> entry : map.entrySet()){ System.out.println(entry.getKey() + ":" + entry.getValue()); }
Dalam kod di atas, ConcurrentHashMap selamat benang dibuat, kemudian dua pasangan nilai kunci dimasukkan dan peta dilalui.
Java menyediakan pelbagai kaedah pelaksanaan kunci, seperti disegerakkan, ReentrantLock, dsb. Dalam persekitaran berbilang benang, kunci adalah mekanisme penting untuk memastikan pelaksanaan segerak benang.
Berikut ialah contoh menggunakan ReentrantLock untuk melaksanakan kunci penyegerakan:
ReentrantLock lock = new ReentrantLock(); lock.lock(); try { // 同步代码块 } finally { lock.unlock(); }
Dalam kod di atas, gunakan ReentrantLock untuk mencipta kunci dan dapatkan kunci melalui kaedah lock() sebelum mengunci. Selepas pelaksanaan, Lepaskan kunci melalui kaedah buka kunci().
Ringkasan
Pengaturcaraan serentak Java ialah teknologi yang kompleks dan penting Menguasai pengetahuan asasnya sangat penting untuk menulis program berbilang benang yang cekap dan selamat. Artikel ini memberikan gambaran keseluruhan tentang benang, penyegerakan, tidak menentu, kumpulan benang, koleksi serentak dan kunci dalam pengaturcaraan serentak Java. Saya percaya bahawa pembaca mempunyai pemahaman yang lebih mendalam tentang pengaturcaraan serentak Java.
Atas ialah kandungan terperinci Pengetahuan asas tentang pengaturcaraan serentak Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!