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

Bagaimana untuk mengendalikan gangguan dan pembatalan dalam pengaturcaraan serentak Java?

WBOY
Lepaskan: 2024-05-09 08:06:02
asal
1107 orang telah melayarinya

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();
}
Salin selepas log masuk

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

取消

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

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

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

当任务被取消时,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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan