Rumah  >  Artikel  >  Java  >  Kaedah dan contoh berbilang benang yang dibangunkan di Jawa

Kaedah dan contoh berbilang benang yang dibangunkan di Jawa

WBOY
WBOYasal
2023-06-18 18:30:08826semak imbas

Java ialah bahasa pengaturcaraan yang popular dan salah satu bahasa pengaturcaraan berbilang benang yang paling banyak digunakan. Multi-threading merujuk kepada membenarkan program melaksanakan berbilang tugas pada masa yang sama, yang boleh meningkatkan kecekapan pelaksanaan program. Artikel ini akan memperkenalkan kaedah dan contoh berbilang benang dalam pembangunan Java.

  1. Konsep asas Java multi-threading

Multi-threading dalam Java ialah untuk mencipta berbilang thread untuk menyelesaikan tugasan dalam kod. Dalam atur cara berbenang tunggal, setiap penyataan dilaksanakan mengikut turutan, manakala dalam program berbilang benang, utas yang berbeza boleh melaksanakan penyataan yang berbeza pada masa yang sama, yang meningkatkan kecekapan pelaksanaan program.

Di Java, utas dilaksanakan melalui kelas Thread. Setiap utas ialah unit pelaksanaan bebas dengan timbunan pelaksanaan sendiri dan aliran kawalan pelaksanaan. Benang di Jawa dibahagikan kepada benang pengguna dan benang daemon. Apabila semua utas pengguna telah selesai melaksanakan, utas daemon juga akan menamatkan pelaksanaan.

  1. Cara untuk melaksanakan multi-threading dalam Java

Multi-threading dalam Java boleh dilaksanakan dengan melaksanakan antara muka Runnable atau mewarisi kelas Thread. Menggunakan antara muka Runnable boleh mencapai penggunaan semula kod, dan menggunakan kelas Thread boleh mencapai lebih kawalan.

2.1 Laksanakan antara muka Runnable

Menggunakan antara muka Runnable memerlukan pelaksanaan kaedah run() dan menulis kod untuk dilaksanakan oleh berbilang benang dalam kaedah run(). Untuk menggunakan antara muka Runnable, anda perlu mencipta objek Thread dan memulakan thread melalui objek Thread.

Kod sampel adalah seperti berikut:

public class MyRunnable implements Runnable {

    @Override
    public void run() {
        //多线程执行的代码
        System.out.println("MyRunnable start");
    }

    public static void main(String[] args) {

        MyRunnable r = new MyRunnable();
        Thread t = new Thread(r);
        t.start();

    }
}

2.2 Mewarisi kelas Thread

Mewarisi kelas Thread memerlukan mengatasi kaedah run() dan menulis fungsi yang akan dilaksanakan oleh berbilang benang dalam kod kaedah run().

Kod sampel adalah seperti berikut:

public class MyThread extends Thread{

    @Override
    public void run() {
        //多线程执行的代码
        System.out.println("MyThread start");
    }

    public static void main(String[] args) {

        MyThread t = new MyThread();
        t.start();

    }
}
  1. Kaedah biasa Java multi-threading

Multi-threading di Java boleh dikendalikan menggunakan beberapa biasa kaedah. Berikut ialah kaedah yang biasa digunakan:

3.1 start()

Kaedah start() ialah kaedah untuk memulakan thread.

Kod sampel adalah seperti berikut:

Thread t = new Thread();
t.start();

3.2 join()

kaedah join() ialah kaedah yang menunggu urutan untuk menyelesaikan pelaksanaan.

Kod sampel adalah seperti berikut:

Thread t = new Thread();
t.start();
t.join();

kaedah 3.3 sleep()

sleep() ialah kaedah untuk membiarkan benang tidur untuk satu tempoh masa.

Kod sampel adalah seperti berikut:

Thread.sleep(1000);
  1. Isu penyegerakan Java multi-threading

Multi-threading dalam Java akan melibatkan isu penyegerakan benang boleh berbuat demikian pada masa yang sama Mengakses sumber yang sama boleh menyebabkan konflik. Java menyediakan kata kunci yang disegerakkan dan antara muka Kunci untuk menyelesaikan masalah ini.

4.1 kata kunci disegerakkan

Kata kunci disegerakkan boleh digunakan untuk mengubah suai objek atau kaedah untuk memastikan hanya satu utas boleh melaksanakan objek atau kaedah ini pada masa yang sama.

Kod sampel adalah seperti berikut:

public class MyThread implements Runnable{

    private static int count = 0;

    @Override
    public synchronized void run() {
        for (int i = 0; i < 10000; i++) {
            count++;
        }
    }

    public static void main(String[] args) throws InterruptedException {

        MyThread r1 = new MyThread();
        MyThread r2 = new MyThread();

        Thread t1 = new Thread(r1);
        Thread t2 = new Thread(r2);

        t1.start();
        t2.start();

        t1.join();
        t2.join();

        System.out.println(count);

    }
}

4.2 Antara muka kunci

Antara muka kunci menyediakan kaedah penguncian yang lebih fleksibel dan lebih halus daripada kata kunci yang disegerakkan.

Kod sampel adalah seperti berikut:

public class MyThread implements Runnable{

    private static int count = 0;

    private Lock lock = new ReentrantLock();

    @Override
    public void run() {

        lock.lock();
        try {
            for (int i = 0; i < 10000; i++) {
                count++;
            }
        } finally {
            lock.unlock();
        }

    }

    public static void main(String[] args) throws InterruptedException {

        MyThread r1 = new MyThread();
        MyThread r2 = new MyThread();

        Thread t1 = new Thread(r1);
        Thread t2 = new Thread(r2);

        t1.start();
        t2.start();

        t1.join();
        t2.join();

        System.out.println(count);

    }
}
  1. Kesimpulan

Multi-threading dalam Java boleh meningkatkan kecekapan pelaksanaan program dan sering digunakan dalam pembangunan. Artikel ini memperkenalkan konsep asas, kaedah pelaksanaan, kaedah biasa dan penyelesaian kepada masalah penyegerakan dalam multithreading Java. Saya berharap ia akan membantu pelajar yang membangunkan Java.

Atas ialah kandungan terperinci Kaedah dan contoh berbilang benang yang dibangunkan di Jawa. 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