Pembatalan Thread
Pada thread Java, asynchronous cancellation dilakukan dengan pemanggilan method
stop()
. Akan tetapi, method ini sudah di- deprecated karena terbukti tidak aman. Stop()
dapat mengakibatkan terjadinyaexception ThreadDeath
, yang mematikan thread-thread secara diam-diam, sehingga user mungkin saja tidak mendapat peringatan bahwa programnya tidak berjalan dengan benar.Cara yang lebih aman untuk membatalkan thread Java adalah dengan deferred cancellation. Pembatalan ini dapat dilakukan dengan pemanggilan method
interrupt()
, yang akan mengeset status interupsi pada target thread. Sementara itu, target thread dapat memeriksa status interupsi-nya dengan method isInterrupted()
.
class CobaThread3 implements Runnable
{
public void run(){
while (true){
System.out.println("saya thread CobaThread3");
if (Thread.currentThread.isInterrupted()) //cek status
break;
}
}
}
Suatu thread dari kelas CobaThread3
dapat diinterupsi dengan kode berikut:
Thread targetThread = new Thread (new CobaThread3());
targetThread.start();
targetThread.interrupt(); //set status interupsi
Ketika thread targetThread berada pada start()
, thread tersebut akan terus me- loop pada method run()
dan melakukan pengecekan status interupsi melalui method isInterrupted()
. Status interupsinya sendiri baru di-set ketika pemanggilan method interrupt()
, yang ditunjukkan dengan statement targetThread.interrupt();
. Setelah status interupsi di-set, ketika pengecekan status interupsi selanjutnya pada methodrun()
, isInterrupted()
akan mengembalikan nilai boolean true, sehingga targetThread akan keluar dari method run()
-nya melalui statement break
dan terminate.Selain melalui
isInterrupted()
, pengecekan status interupsi dapat dilakukan dengan method interrupted()
. Perbedaan kedua method ini adalah isInterrupted()
akan mempertahankan status interupsi, sedangkan pada interrupted()
, status interupsi akan di- clear.Thread yang statusnya sedang blocked karena melakukan operasi M/K menggunakan package
java.io
tidak dapat memeriksa status interupsinya sebelum operasi M/K itu selesai. Namun, melalui Java 1.4 diperkenalkanpackage java.nio
yang mendukung interupsi thread yang sedang melakukan operasi M/K.
0 komentar:
Posting Komentar
Please Give Your Feedback Or Message.
Thank You!!?