Rumah  >  Artikel  >  Java  >  Mata pengetahuan penting untuk temu bual pengaturcaraan berbilang benang Java

Mata pengetahuan penting untuk temu bual pengaturcaraan berbilang benang Java

PHPz
PHPzasal
2024-04-12 10:48:011047semak imbas

Java pengaturcaraan berbilang benang melibatkan penciptaan dan pengurusan benang untuk membolehkan pelaksanaan serentak. Ia merangkumi konsep asas benang, penyegerakan, kumpulan benang dan contoh praktikal: Benang ialah proses ringan yang berkongsi ruang memori dan membenarkan pelaksanaan serentak. Penyegerakan menjamin akses kepada sumber yang dikongsi melalui kunci atau operasi atom. Kumpulan benang mengurus benang, meningkatkan prestasi dan mengurangkan overhed penciptaan dan pemusnahan. Contoh praktikal menggunakan multi-threading untuk mengimbas fail dalam direktori secara selari.

Mata pengetahuan penting untuk temu bual pengaturcaraan berbilang benang Java

Titik pengetahuan penting untuk temu bual pengaturcaraan berbilang benang Java

1.

Benang membenarkan berbilang tugasan bebas dilaksanakan serentak dalam program yang sama.
  • Sampel kod:
class MyThread extends Thread {
    public void run() {
        System.out.println("This is a thread");
    }
}

public class Main {
    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start();
    }
}

2. Penyegerakan benang

Penyegerakan benang memastikan perlumbaan data dielakkan apabila mengakses sumber kongsi.

Penyegerakan boleh dicapai dengan menggunakan mekanisme penguncian atau operasi atom.
  • Contoh kod (menggunakan disegerakkan):
class Counter {
    private int count;

    public synchronized void increment() {
        count++;
    }

    public synchronized int getCount() {
        return count;
    }
}

public class Main {
    public static void main(String[] args) {
        Counter counter = new Counter();
        Thread thread1 = new Thread(() -> {
            for (int i = 0; i < 10000; i++) {
                counter.increment();
            }
        });
        Thread thread2 = new Thread(() -> {
            for (int i = 0; i < 10000; i++) {
                counter.increment();
            }
        });
        thread1.start();
        thread2.start();
        thread1.join();
        thread2.join();
        System.out.println(counter.getCount()); // 输出:20000
    }
}

3. Kolam benang

Kolam benang ialah set sumber yang menguruskan benang.

Ia meningkatkan prestasi dan mengurangkan overhed untuk mencipta dan memusnahkan benang.
  • Contoh kod (menggunakan ThreadPoolExecutor):
ExecutorService executor = Executors.newFixedThreadPool(5);
for (int i = 0; i < 10; i++) {
    executor.submit(() -> {
        System.out.println("This is a thread from the pool");
    });
}

executor.shutdown();

4 Kes praktikal: pengimbasan fail

Gunakan multi-threading untuk mengimbas fail dalam direktori yang besar secara selari.

  • Contoh kod:
import java.io.File;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class FileScanner {
    private static void scan(File dir) {
        File[] files = dir.listFiles();
        if (files == null)
            return;
        ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
        for (File f : files) {
            executor.submit(() -> {
                if (f.isDirectory())
                    scan(f);
                else
                    System.out.println(f.getAbsolutePath());
            });
        }
        executor.shutdown();
    }

    public static void main(String[] args) {
        File root = new File("..."); // 替换为要扫描的目录
        scan(root);
    }
}

Atas ialah kandungan terperinci Mata pengetahuan penting untuk temu bual pengaturcaraan berbilang benang Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn