Dengan pembangunan berterusan perkakasan komputer, populariti CPU berbilang teras, dan keperluan kecekapan aplikasi moden, pengaturcaraan berbilang benang telah menjadi topik yang tidak dapat dielakkan dalam bidang pengaturcaraan Java. Di Java, pengaturcaraan berbilang benang bergantung pada kelas Thread dan antara muka Runnable Java menyediakan satu siri komponen benang yang boleh membantu kami mencipta dan mengurus berbilang benang. Artikel ini akan memperkenalkan beberapa petua praktikal untuk pengaturcaraan berbilang benang dalam Java untuk membolehkan anda melakukan pengaturcaraan berbilang benang dengan lebih baik.
Kelas Thread dalam Java digunakan untuk mencipta dan mengurus utas. Objek utas mewakili utas yang berasingan Kita boleh mencipta utas dengan mewarisi kelas Thread atau melaksanakan antara muka Runnable. Berikut ialah contoh mewarisi kelas Thread:
public class MyThread extends Thread { public void run() { // 线程执行的代码 } }
Kita boleh memulakan thread melalui kod berikut:
MyThread myThread = new MyThread(); myThread.start();
Kaedah start() dalam kod di atas akan membuatkan thread mula berjalan dan kaedah run () panggilan.
Setiap urutan di Java mempunyai keutamaan Secara lalai, urutan mewarisi keutamaan proses induk yang menciptanya. Anda boleh menggunakan kaedah setPriority() dan getPriority() untuk menetapkan dan mendapatkan keutamaan utas:
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
Kod di atas menetapkan keutamaan utas semasa kepada yang tertinggi. Perlu diingatkan bahawa penetapan keutamaan bergantung pada platform, jadi terlalu bergantung pada penjadualan keutamaan harus dielakkan.
Dalam pengaturcaraan berbilang benang, penyegerakan antara benang adalah sangat penting. Java menyediakan beberapa mekanisme untuk mencapai penyegerakan benang, seperti kata kunci disegerakkan, kelas ReentrantLock, dsb. Kata kunci disegerakkan menggunakan mekanisme kunci untuk memastikan penyegerakan antara berbilang utas Ia boleh digunakan untuk mengubah suai kaedah dan blok kod:
public synchronized void addCount() { count++; }
Kaedah ini menggunakan kata kunci disegerakkan untuk memastikan keselamatan utas apabila mengakses pembolehubah kiraan.
Kelas ReentrantLock menyediakan mekanisme penguncian yang sama seperti yang disegerakkan, tetapi ia lebih fleksibel dan boleh dikawal.
Java menyediakan beberapa mekanisme untuk merealisasikan menunggu dan bangun antara rangkaian, seperti kaedah tunggu(), notify(), notifyAll( ) . Kaedah ini hanya boleh dipanggil dalam blok yang disegerakkan dan ia digunakan untuk mengawal pelaksanaan dan menunggu utas:
synchronized(lock) { while(!condition) { lock.wait(); } // 执行线程需要的操作 lock.notifyAll(); }
Kaedah wait() dalam kod di atas akan menyebabkan utas menunggu sehingga keadaan menjadi benar. Kaedah notifyAll() akan membangunkan semua utas menunggu kunci objek.
Semasa pelaksanaan utas, pelbagai situasi yang tidak dijangka mungkin berlaku, seperti pengecualian penuding nol, pengecualian luar sempadan tatasusunan, dsb. . Untuk mengelakkan pengecualian ini menyebabkan utas keluar, kita boleh menggunakan pernyataan cuba-tangkap untuk menangkap pengecualian:
public void run() { try { // 线程执行的代码 } catch(Exception e) { // 处理异常 } }
Mengelakkan keluar utas yang tidak normal adalah sangat penting untuk memastikan kestabilan dan kebolehpercayaan aplikasi.
Ringkasan
Artikel ini memperkenalkan kemahiran praktikal pengaturcaraan berbilang benang di Java, meliputi penciptaan dan permulaan thread, keutamaan, penyegerakan, menunggu dan bangun, dan pengendalian pengecualian. Petua ini boleh membantu kami menulis aplikasi berbilang benang dengan lebih baik dan meningkatkan kecekapan dan prestasi aplikasi. Apabila melakukan pengaturcaraan berbilang benang, kita harus mempertimbangkan sepenuhnya isu seperti keselamatan benang, pengoptimuman dan fleksibiliti untuk memastikan kestabilan dan kebolehpercayaan aplikasi.
Atas ialah kandungan terperinci Pengaturcaraan Berbilang Thread dalam Java: Petua Praktikal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!