Java Concurrent Programming Penjelasan Terperinci Praktikal Pengaturcaraan Serentak: Teknologi pemprosesan data selari berbilang benang untuk meningkatkan prestasi aplikasi. Mekanisme konkurensi Java: Thread: unit pelaksanaan ringan yang boleh melaksanakan tugas secara selari. Kunci: Segerakkan akses kepada sumber yang dikongsi untuk mengelakkan operasi serentak. Operasi atom: tidak terganggu, sama ada semua berjaya atau semua gagal. Koleksi Serentak: Kelas pengumpulan selamat benang yang membenarkan operasi berbilang benang. Kes praktikal: Rangka berbilang benang halaman web menggunakan ExecutorService dan CompletionService untuk mengurus urutan dan mengumpul hasil untuk meningkatkan kecekapan rangkak.
Penjelasan praktikal terperinci tentang pengaturcaraan serentak Java
Pengenalan
Pengaturcaraan serentak ialah teknologi untuk pemprosesan data selari berbilang benang, yang boleh meningkatkan prestasi aplikasi dengan ketara. Di Java, terdapat berbilang mekanisme konkurensi, termasuk benang, kunci, operasi atom dan koleksi serentak.
Benang
Benang ialah unit pelaksanaan ringan yang boleh melaksanakan tugasan secara selari. Untuk membuat urutan, anda boleh menggunakan kelas Thread
atau melaksanakan antara muka Runnable
. Thread
类或实现Runnable
接口。
// 使用 Thread 类创建线程 Thread thread = new Thread(new Runnable() { @Override public void run() { System.out.println("Hello from thread!"); } }); // 使用 Runnable 创建线程 Runnable runnable = () -> System.out.println("Hello from runnable!"); Thread thread = new Thread(runnable);
锁
锁用于同步对共享资源的访问,防止多个线程同时操作同一数据。Java中常用的锁是synchronized
关键字和ReentrantLock
类。
原子操作
原子操作是一种不可中断的操作,要么全部执行成功,要么全部失败。Java中提供了AtomicInteger
等原子类来封装基本类型操作,以确保线程安全。
并发集合
并发集合是线程安全的集合类,允许多个线程同时访问和修改数据,而无需显式同步。常用的并发集合包括ConcurrentHashMap
和CopyOnWriteArrayList
。
实战案例:多线程爬取网页
下面是一个使用多线程爬取网页的实战案例:
import java.util.concurrent.*; import java.util.List; public class WebCrawler { public static void main(String[] args) { ExecutorService executor = Executors.newFixedThreadPool(10); CompletionService<String> completionService = new ExecutorCompletionService<>(executor); List<String> urls = List.of("url1", "url2", "url3", ..., "urlN"); for (String url : urls) { completionService.submit(() -> fetchPage(url)); } executor.shutdown(); executor.awaitTermination(1, TimeUnit.DAYS); for (int i = 0; i < urls.size(); i++) { try { String page = completionService.take().get(); System.out.println("Fetched page: " + page); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } } } private static String fetchPage(String url) { // 模拟爬取网页操作 return "Page content for " + url; } }
在这个案例中,多个线程并行爬取网页,提高了爬取效率。CompletionService
rrreee
disegerakkan
dan kelas ReentrantLock
. 🎜🎜🎜Operasi atom🎜🎜🎜Operasi atom ialah operasi tanpa gangguan yang sama ada semuanya berjaya dilaksanakan atau semuanya gagal. Java menyediakan kelas atom seperti AtomicInteger
untuk merangkum operasi jenis asas bagi memastikan keselamatan benang. 🎜🎜🎜Koleksi Serentak🎜🎜🎜Koleksi serentak ialah kelas koleksi selamat benang yang membenarkan berbilang urutan mengakses dan mengubah suai data secara serentak tanpa penyegerakan yang jelas. Koleksi serentak yang biasa digunakan termasuk ConcurrentHashMap
dan CopyOnWriteArrayList
. 🎜🎜🎜Kes praktikal: Merangkak berbilang benang halaman web🎜🎜🎜Berikut ialah kes praktikal menggunakan berbilang benang untuk merangkak halaman web: 🎜rrreee🎜Dalam kes ini, berbilang benang merangkak halaman web secara selari, yang meningkatkan kecekapan merangkak. CompletionService
digunakan untuk mengumpul dan mengurus hasil yang dikembalikan oleh urutan, mengelakkan kerumitan pengurusan berbilang benang. 🎜Atas ialah kandungan terperinci Pengenalan kepada Asas Java kepada Aplikasi Praktikal: Penjelasan Praktikal Terperinci tentang Pengaturcaraan Serentak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!