High Fashioners Issue # 2 | Page 307

J. E. N. I.
9.7 Kemampuan Concurrency
Dengan dirilisnya J2SE 5.0, telah tersedia kontrol threading yang baru dan juga tambahan fitur yang disebut concurrency. Fitur baru ini dapat ditemukan didalam package java. util. concurrent. Didalam sub bab ini, ada dua jenis fitur concurrency yang akan dijelaskan.
9.7.1 Interface Executor
Salah satu penambahan fitur mutakhir yang telah dibangun dalam aplikasi multithread adalah framework Executor. Interface ini termasuk didalam package java. util. concurrent, dimana object dari tipe ini akan mengeksekusi tugas-tugas dari Runnable.
Tanpa penggunaan interface ini, kita akan mengeksekusi tugas dari Runnable dengan cara menciptakan instance dari Thread dan memanggil method start dari object Thread. Kode dibawah ini mendemonstrasikan hal tersebut:
new Thread(< aRunnableObject >). start();
Dengan kemampuan dari interface yang baru ini, object Runnable yang telah diberikan akan dieksekusi menggunakan kode berikut ini:
< anExecutorObject >. execute(< aRunnableObject >);
Framework Executor ini berguna untuk aplikasi multithread, karena thread membutuhkan pengaturan dan penumpukan di suatu tempat, sehingga thread bisa saja sangat mahal. Sebagai hasilnya, pembangunan beberapa thread dapat mengakibatkan error pada memori. Salah satu solusi untuk mengatasi hal tersebut adalah dengan pooling thread. Didalam sebuah pooling thread, sebuah thread tidak lagi berhenti sementara akan tetapi ia akan berada dalam antrian didalam sebuah pool, setelah ia selesai melaksanakan tugasnya. Bagaimanapun, mengimplementasikan sebuah skema thread pooling dengan desain yang baik, tidaklah mudah dilakukan. Permasalahan yang lain adalah kesulitan untuk membatalkan atau mematikan sebuah thread.
Framework Executor merupakan salah satu solusi dari permasalahan ini dengan cara mechanic decoupling task submission mengenai bagaimana setiap tugas dijalankan, termasuk detail dari penggunaan thread, penjadwalan, dan sebagainya. Lebih disarankan untuk membuat thread secara eksplisit daripada membuat thread dan menjalankannya lewat method start yang telah diset untuk setiap task. Oleh karena itu lebih disarankan untuk menggunakan potongan kode berikut ini:
Executor < executorName > = < anExecutorObject >; < executorName >. execute( new < RunnableTask1 >()); < executorName >. execute( new < RunnableTask2 >());...
Dikarenakan Executor adalah sebuah interface, ia tidak dapat di-instantiate. Untuk menciptakan sebuah object Executor, ia harus membuat sebuah class yang mengimplementasikan interface ini atau dengan menggunakan factory method yang telah disediakan class Executor. Class ini juga tersedia didalam package yang sama seperti Executor interface. Class Executors juga menyediakan factory method untuk memanage thread pool sederhana. Berikut ini adalah rangkuman dari beberapa factory
Pengenalan Pemrograman 2 17