Thread lagi : Penggunaan wait() dan synchronized().

Pada awalnya kita sering bingung mengenai penggunaan synchronized() dan wait().

Misalnya pada contoh berikut :

class SuatuThread {

Object obj;

public SuatuThread(Object obj){

this.obj = obj;

}

public void run(){

synchronized (obj) {

obj.wait();

}

}

}

Disini kita sering rancu mengenai baris : obj.wait();

Pengertian awal kita adalah method wait() ini mestinya dipanggil oleh thread untuk menunggu giliran memakai Object obj, tetapi yang kita lihat adalah wait() dipanggil oleh obj itu sendiri (resource yg sedang di-sharing/di-lock/di-synchronized).

Untuk membenahi hal ini kita perlu mengingat bahwa method wait() bukan method dari kelas Thread, melainkan method bawaan dari kelas Object.

Jadi pengertian dari obj.wait()bukan berarti si obj yang menunggu (wait), melainkan berarti thread yang bersangkutan akan menunggu (wait) sampai thread lain selesai menggunakan obj (bisa dilihat di javadoc bagian penjelasan method wait()).

Locking/synchronizing lebih dekat hubungannya dengan suatu object bukan dengan thread, karena thread hanya memerlukan synchronization ketika dia bekerja dengan shared-object.

Maka dari itu di Java, wait() and notify() diasosiasikan dengan kelas Object.

Advertisements