Rumah  >  Artikel  >  Java  >  Bagaimana untuk mengendalikan gangguan dan pembatalan dalam pengaturcaraan serentak Java?

Bagaimana untuk mengendalikan gangguan dan pembatalan dalam pengaturcaraan serentak Java?

WBOY
WBOYasal
2024-05-09 08:06:021046semak imbas

Dalam pengaturcaraan serentak Java, gangguan dan pembatalan adalah kaedah yang digunakan untuk menghentikan tugas. Gangguan adalah untuk menghentikan rangkaian berjalan serta-merta, yang dicapai dengan memanggil Thread.interrupt(); pembatalan ialah proses kerjasama, yang memerlukan tugas untuk menyemak status pembatalan dan bertindak balas secara eksplisit, dan dicapai dengan mencipta tugasan yang boleh dibatalkan.

Java 并发编程中如何处理中断和取消?

Cara mengendalikan gangguan dan pembatalan dalam pengaturcaraan serentak Java

Dalam pengaturcaraan serentak, kadangkala ia perlu untuk mengganggu atau membatalkan tugas semasa ia sedang dijalankan. Java menyediakan dua kaedah untuk mengendalikan situasi ini: ganggu dan batal.

Sampukan

Sampukan ialah mekanisme yang membolehkan benang berhenti melaksanakan tugas semasa. Ini biasanya digunakan apabila tugas perlu dihentikan serta-merta, seperti apabila pengguna membatalkan operasi atau menghadapi ralat. Benang boleh diganggu dengan memanggil kaedah Thread.interrupt(). Thread.interrupt() 方法可以中断线程。

// 中断线程
Thread thread = new Thread(() -> {
    // 线程执行的任务
    while (!Thread.currentThread().isInterrupted()) {
        // 运行任务
    }
});
thread.start();

// 在某些条件下中断线程
if (condition) {
    thread.interrupt();
}

被中断的线程会抛出 InterruptedException 异常。线程可以捕获此异常并做出相应的处理,例如停止任务或清理资源。

取消

取消是另一种让线程停止执行当前任务的方法。与中断不同的是,取消是一个协作过程,需要线程明确检查其取消状态并做出反应。通过创建实现 java.util.concurrent.Future 接口的可取消任务,可以实现取消。

// 创建可取消任务
ExecutorService executorService = Executors.newFixedThreadPool(1);
Future<?> task = executorService.submit(() -> {
    // 线程执行的任务
    while (!task.isCancelled()) {
        // 运行任务
    }
});

// 在某些条件下取消任务
if (condition) {
    task.cancel(true);
}

当任务被取消时,Future.isCancelled() 方法将返回 truerrreee

Urut yang terganggu akan membuang pengecualian InterruptedException. Benang boleh menangkap pengecualian ini dan mengendalikannya dengan sewajarnya, seperti menghentikan tugas atau membersihkan sumber. 🎜🎜🎜Pembatalan🎜🎜🎜Pembatalan ialah satu lagi cara untuk menghentikan urutan daripada melaksanakan tugas semasa. Tidak seperti gangguan, pembatalan ialah proses kerjasama yang memerlukan urutan untuk menyemak status pembatalan dan bertindak balas secara eksplisit. Pembatalan dicapai dengan mencipta tugas boleh dibatalkan yang melaksanakan antara muka java.util.concurrent.Future. 🎜rrreee🎜Apabila tugasan dibatalkan, kaedah Future.isCancelled() akan mengembalikan true. Benang boleh menyemak status ini secara berkala dan menghentikan tugas seperti yang diperlukan. 🎜

Atas ialah kandungan terperinci Bagaimana untuk mengendalikan gangguan dan pembatalan dalam pengaturcaraan serentak 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