Rumah  >  Artikel  >  Java  >  Bagaimana untuk mengendalikan pengecualian gangguan tunggu tunggu benang dalam pembangunan Java

Bagaimana untuk mengendalikan pengecualian gangguan tunggu tunggu benang dalam pembangunan Java

PHPz
PHPzasal
2023-06-29 13:25:101783semak imbas

Cara mengendalikan pengecualian gangguan tunggu tamat benang dalam pembangunan Java

Dalam pembangunan Java, penggunaan benang adalah sangat biasa, terutamanya apabila menangani tugasan serentak. Walau bagaimanapun, tamat masa menunggu urutan dan gangguan mungkin menyebabkan beberapa masalah, jadi kami perlu mengendalikan pengecualian ini dengan berhati-hati. Artikel ini akan memperkenalkan cara mengendalikan tamat masa menunggu benang dan mengganggu pengecualian dalam pembangunan Java.

1. Tamat masa menunggu benang

  1. Gunakan kaedah tunggu dan maklumkan Object

Di Java, kita boleh menggunakan kaedah tunggu dan maklumkan kelas Objek untuk merealisasikan urutan menunggu dan bangun. Kaedah tunggu boleh meletakkan utas ke dalam keadaan menunggu, dan kaedah pemberitahuan boleh membangunkan utas menunggu.

Apabila kita sedang menunggu selesai sesuatu tugasan, kita boleh menggunakan kaedah tunggu untuk menetapkan tamat masa iaitu benang akan terjaga secara automatik selepas menunggu suatu tempoh masa. Contohnya:

synchronized (lock) {
    long startTime = System.currentTimeMillis();
    while (!task.isDone()) {
        lock.wait(timeout);
        if (System.currentTimeMillis() - startTime > timeout) {
            break; // 超时,跳出循环
        }
    }
}

Semasa menunggu, kita juga perlu menyemak sama ada tugasan itu selesai, dan jika ia selesai, kita boleh melompat keluar dari gelung. Ini menghalang benang daripada menunggu selama-lamanya.

  1. Menggunakan antara muka Masa Depan dan Boleh Dipanggil

ExecutorService di Java menyediakan cara yang lebih maju untuk mengendalikan tamat masa menunggu rangkaian. Kita boleh menggunakan kaedah serah untuk menyerahkan tugas Boleh Panggil dan mengembalikan objek Masa Depan.

Objek masa hadapan boleh digunakan untuk mendapatkan hasil pelaksanaan tugas, dan tamat masa boleh ditetapkan. Contohnya:

ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(new Callable<String>() {
    @Override
    public String call() throws Exception {
        // 执行任务
        return "Task result";
    }
});

try {
    String result = future.get(timeout, TimeUnit.MILLISECONDS);
    // 处理任务结果
} catch (InterruptedException | ExecutionException | TimeoutException e) {
    // 处理异常
} finally {
    executor.shutdown();
}

Apabila menggunakan kaedah future.get() untuk mendapatkan hasil tugasan, anda boleh menetapkan tamat masa. Jika masa yang ditetapkan melebihi, TimeoutException akan dilemparkan.

2. Gangguan benang

  1. Gunakan kaedah gangguan

Benang Java menyediakan kaedah gangguan untuk mengganggu benang. Kaedah ini boleh dipanggil apabila kita perlu mengganggu satu utas.

Apabila menangani gangguan benang, kita boleh menggunakan kaedah Thread isInterrupted untuk menyemak sama ada benang terganggu, dan kemudian mengendalikannya dengan sewajarnya. Contohnya:

while (!Thread.currentThread().isInterrupted()) {
    // 执行任务
}

Dalam gelung, kita boleh terus menyemak status gangguan benang dan melompat keluar daripada gelung jika benang terganggu.

  1. Menggunakan ExecutorService

Jika kami menggunakan ExecutorService untuk menguruskan kumpulan benang, kami boleh menggunakan kaedah shutdownNow untuk mengganggu tugasan pelaksanaan dan mengembalikan senarai tugasan yang belum selesai. Contohnya:

ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(new Runnable() {
    @Override
    public void run() {
        while (!Thread.currentThread().isInterrupted()) {
            // 执行任务
        }
    }
});

List<Runnable> unfinishedTasks = executor.shutdownNow();

Selepas memanggil kaedah shutdownNow, semua tugasan yang belum selesai akan terganggu dan senarai tugasan yang belum selesai akan dikembalikan.

Ringkasan:

Dalam pembangunan Java, adalah sangat penting untuk mengendalikan tamat masa menunggu benang dan mengganggu pengecualian. Kita boleh menggunakan kaedah menunggu dan memberitahu Objek, antara muka Masa Depan dan Boleh Panggil, kaedah gangguan benang dan ExecutorService untuk mengendalikan pengecualian ini. Mengendalikan tamat masa dan gangguan menunggu urutan dengan betul boleh memastikan program kami lebih stabil dan boleh dipercayai.

Atas ialah kandungan terperinci Bagaimana untuk mengendalikan pengecualian gangguan tunggu tunggu benang dalam pembangunan 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