J. E. N. I.
9.5 Sinkronisasi
Sampai sejauh ini, Anda telah melihat contoh-contoh dari thread yang berjalan bersamasama tetapi tidak bergantung satu dengan yang lainnya. Thread tersebut adalah thread yang berjalan sendiri tanpa memperhatikan status dan aktifitas dari thread lain yang sedang berjalan. Pada contoh tersebut, setiap thread tidak membutuhkan resource atau method dari luar sehingga ia tidak membutuhkan komunikasi dengan thread lain.
Didalam situasi-situasi tertentu, bagaimanapun sebuah thread yang berjalan bersamasama kadang-kadang membutuhkan resource atau method dari luar. Oleh karena itu, mereka butuh untuk berkomunikasi satu dengan yan lain sehingga dapat mengetahui status dan aktifitas mereka. Contohnya adalah pada permasalahan produsen-konsumen. Kasus ini membutuhkan dua object utama, yaitu produsen dan konsumen. Kewajiban yang dimiliki oleh produsen adalah untuk membangkitkan nilai atau stream data yang konsumen inginkan.
9.5.1 Sebuah contoh yang tidak disinkronisasi
Marilah kita perhatikan sebuah kode sederhana yang mencetak sebuah string dengan urutan tertentu. Inilah programnya.
class TwoStrings { static void print( String str1, String str2) { System. out. print( str1); try {
Thread. sleep( 500); } catch( InterruptedException ie) { } System. out. println( str2);
}
}
class PrintStringsThread implements Runnable { Thread thread; String str1, str2; PrintStringsThread( String str1, String str2) { this. str1 = str1; this. str2 = str2; thread = new Thread( this); thread. start();
} public void run() {
TwoStrings. print( str1, str2);
}
} class TestThread { public static void main( String args []) { new PrintStringsThread(" Hello ", " there."); new PrintStringsThread(" How are ", " you?"); new PrintStringsThread(" Thank you ", " very much!");
}
}
Pengenalan Pemrograman 2 9