SlideShare a Scribd company logo
1 of 28
Download to read offline
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
MENGENAL JAVA SEBAGAI PEMROGRAMAN BERORIENTASI OBJEK
DAN IMPLEMENTASI THREAD DI LINGKUNGAN UNIX/ LINUX
Hary Cahyono
System Administrator, tifosilinux.wordpress.com
Fakultas Manajemen, Universitas Persada Indonesia – YAI
Email : h4ry.oop@gmail.com, harymu_ammar@yahoo.com
Jl. Diponegoro No. 74, Jakarta Pusat, DKI Jakarta
ABSTRAK
Sebagian besar sistem administrator menggunakan cronjobs
sebagai program yang handal dalam mengimplementasikan
manajemen proses di lingkungan UNIX/ Linux. Layaknya
program task scheduler di lingkungan Windows, cronjobs
mampu mengatur waktu proses agar berjalan sesuai dengan
prioritas waktu. Tidak ada fitur lebih selain fleksibilitas waktu
dalam menjalankan script baik itu program php, shell script, perl,
atau yang lainnya. Java hadir dengan variasi fiturnya untuk
memperluas penanganan jalannya berbagai task di sistem operasi.
Dengan pemahaman sebelumnya akan konsep pemrograman
berorientasi objek dan lingkungan UNIX/ Linux, kita bisa
mengimplementasikan thread di java sebagai sebuah solusi.
Kata kunci : Java, UNIX/ Linux, Thread, Pemrograman
Berorientasi Objek
ABSTRACT
The majority of system administrators are using cronjobs as
a reliable program to implementing process management in
UNIX/ Linux environment. Cronjobs able to set the time that the
process runs according to time priority. I see no more features
beside the flexibility of time either php script, shell scripts, perl,
or others. Java comes with its variation to extend the course of
handling a variety of tasks in OS. First, begin to understanding
the concepts of Object Oriented Programming and Unix/ Linux
Fundamental, we can implement a thread in java as a solution.
Keywords : Java, UNIX/ Linux, Thread, Object Oriented
Programming.
1
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
1. PENDAHULUAN
Sebuah kendala yang sering dialami seorang system administrator adalah ketika ia harus bisa
mengoptimalkan sistem dengan resource yang terbatas. Ketika sebuah traffic yang menjadikan load
server begitu tinggi namun banyak proses yang 'terdaftar' di cronjobs akan menjadi sebuah dilema.
Belum lagi ditambah aspek-aspek lain semisal keterbatasan memori, service tunning (Apache Web
Server, MySQL) yang kurang baik hingga rule firewall atau routing dan masih banyak lagi. Untuk
dapat mengimplementasikan thread di java, seseorang terlebih dahulu harus memahami konsep
pemrograman berorientasi objek (OOP), multitasking dalam sistem operasi, penerapan shell script atau
program-program lain yang mendukung semisal php (lewat argumen -q), perl, ruby, atau lainnya.
Tidak seperti sebagian besar bahasa pemrograman lain pada umumnya, java menyediakan fitur
tambahan yang sangat membantu dalam pembentukan program yang lebih efisien dan pendayagunaan
CPU secara maksimum, yaitu multithreaded programming. Ini artinya, dalam sebuah program java,
kita diizinkan untuk membentuk lebih dari satu thread, me-set prioritas dari thread tersebut, dan
mengalokasikan resource dari CPU yang sesuai dan optimal (Rahardjo, Budi, et al.2009).
Untuk itu, pemahaman akan OOP, lingkungan UNIX/ Linux, dan konsep dari 2 kategori
multitasking yang kelak kita pilih nanti di sistem operasi dapat kita terapkan sebagai salah satu solusi
dari masalah yang dihadapi.
2. Kelas, Objek, Method, dan Constructor
Seperti yang kita ketahui, baik di pemrograman PHP (yang juga sudah mendukung OOP), konsep
OOP memiliki ciri Abstraksi (abstraction), pembungkusan (encapsulation), pewarisan (inherintance),
dan kebanyakrupaan (polymorphism).
2.1 Kelas dan Objek
Kelas merupakan inti dari pemrograman java, ketika kita pertama kali membuat program 'Halo
Dunia' misalnya :
...
class EmployeeBank{
public static void main(String[] args){
System.out.println(”Hello World”);
}
}
…
Dari potongan kode diatas, sebenarnya kita sudah menggunakan kelas namun masih sangat minim
sekali yakni kelas utama (program utama) yang didalamnya mengandung method main(). Selanjutnya
konsep enkapsulasi dapat kita lihat ketika mengguakan public (atau bisa juga private, maupun
protected) pada kelas EmployeeBank tersebut. Kelas dapat didefinisikan sebagai blueprint atau
2
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
prototipe/ kerangka yang didalamnya mendefinisikan variabel-variabel (data), method, constructor, dan
lainnya. Contoh : Mobil memiliki data seperti warna, tahun, merk, tipe, nomor polisi dan sebagainya.
Disamping itu mobil juga memiliki beberapa perilaku spesifik seperti sistem pengereman, persneling,
dan sebagainya. Dalam program, objek semacam ini dapar didefinisikan sebagai sebuah kelas. Namun
perlu diingat bahwa kelas masih bersifat abstrak, kelas hanya merupakan template (pola) untuk
membuat objek, dan objek adalah wujud nyata (instance) dari sebuah kelas. Ketika kita
mendefinisikan suatu kelas, kita hanya membuat tipe data baru, bukan membuat objek baru.
Contoh : Manusia adalah kelas, sedangkan objek atau wujud nyata dari kelas manusia adalah Hary,
Fatih, Linus, dan lainnya.
Baik, kita langsung buat contoh-contoh riil nya.
Dari kode diatas sebenarnya bisa kita pecah kedalam dua buah file dimana file pertama berisikan kelas
dari class Bank1() (dengan nama Bank1.java) dan file kedua (dengan nama DemoBank1.java). Setelah
kita compile dengan javac <nama_file>.java, tinggal kita jalankan dengan java
<nama_file_kelas_utama>. Tipe double teller; double hrd; dan double clerk; merupakan tipe-tipe
variabel atau instance variable.
3
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
Kode diatas menjelaskan bahwa setiap objek (disini kita membentuk dua objek dari kelas Bank2
dengan nama swasta dan pimpinan) atau instance memiliki salinan data sendiri-sendiri, artinya ketika
kita tampilkan ke layar monitor dengan memanggil object_instance.instance_variable (Contoh :
pimpinan.teller) akan menampilkan nilai nya masing-masing (pimpinan.teller memiliki nilai 1).
Nah, agar menambah pemahaman kita saat mendeklarasikan 'objek' dan bagaimana menyimpan
sebuah referensi, didalam sebuah konsep OOP saya buat contoh sebagai berikut.
4
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
Pada kode diatas saya buatkan 2 buah variabel, yakni swasta dan pimpinan yang 'mereferensi' ke
objek Bank (dimana nama sebuah objek haruslah identik dengan nama kelas yang digunakan tanpa
menggunakan kurung buka dan kurung tutup, kelas → Bank; objek → Bank). Kemudian kita
instansiasi objek Bank (barulah disini kita menggunakan kurung buka dan kurung tutup) dan
memasukkan referensinya ke sebuah variabel dengan nama swasta. Tanpa melakukan re-instansiasi,
kita coba masukkan variabel swasta tersebut (yang telah diinstansiasi dengan membawa objek Bank)
kedalam variabel baru yang bernama pimpinan. Hal ini guna membuktikan bahwa meskipun dua nama
tersebut menunjuk ke objek yang sama, namun tidak terdapat hubungan sama sekali antara swasta dan
pimpinan, sehingga kita bisa melepas salah satunya untuk menunjuk ke objek lain tanpa
5
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
mempengaruhi variabel yang lainnya. Saat kita lakukan operasi penjumlahan dengan sebelumnya
memanggil objek yang telah dimiliki oleh dua variabel (yakni pimpinan dan swasta. Kode :
pimpinan.teller, swasta.teller, pimpinan.hrd, swasta.hrd, dst), maka program akan menampilkan nilai
yang sama ke monitor.
Number person1 : 10.0
Number person2 : 10.0
Masih kurang jelas juga ?. Oke saya buat kembali. :)
6
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
Maksud dari alur kode program diatas adalah untuk menunjukkan bahwa ketika kita memindahkan
salah satu variabel (yakni variabel swasta) untuk menunjuk variabel lain (pada contoh kode, kita
menginstansiasi kembali objek baru yang mereferensi ke variabel swasta). Maka hasil yang dicetak ke
layar monitor adalah:
Sebelum nilai swasta diubah
Jumlah number person 1 : 28.0
Jumlah number person 2 : 28.0
Sebelum nilai swasta diubah
Jumlah number person 1 : 6.0
Jumlah number person 2 : 28.0
Sekarang kita coba memahami penurunan kelas atau extends dari kelas yang kita buat sebelumnya.
7
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
Kode diatas menjelaskan bahwa kelas B merupakan kelas turunan dari kelas A (ditandai dengan nama
extends). Akibatnya, kelas B akan mewarisi sifat-sifat dari kelas A. Dari contoh tersebut, kita membuat
sebuah objek dari kelas B di main class (class DemoExtends), kenyataanya objek tersebut “juga”
memiliki method-method setA(nilai); dan getA(nilai); yang dipanggil menggunakan instance objek
dari kelas B tersebut. Disinilah kita menerapkan konsep inheritance atau pewarisan sifat serta
polymorphism dimana 'seperti' terdapat kemampuan untuk mengungkapkan banyak hal melalui satu
cara yang sama (dalam contoh ini, kita menjalankan method di A hanya dari objek yang diistansiasi
dari kelas B) yang merupakan ciri dari OOP.
Oke, berikutnya kita akan mencoba mengupas sedikit tentang method di java.
2.2 Method
Kelas juga berisikan kumpulan-kumpulan dari method yang akan saling bekerja sama melakukan
tugas-tugas spesifik tertentu sesuai dari perilaku objek yang dimodelkan. Kita lihat contoh kode-kode
berikut.
8
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
Method (perilaku) terbagi dua macam, yakni method void yang tidak mengembalikan nilai
kedalam kelas utamanya (tidak menggunakan return nilai) dan method non-void yang mengembalikan
nilai. Dari kode diatas, kita mencoba membuat sebuah method CetakKaryawan() yang tidak
mengembalikan nilai (sehingga tidak menggunakan return). Sekarang coba perhatikan kode-kode
berikut yang menggunakan method yang mengembalikan nilai.
9
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
Dari kode tersebut, method HitungKaryawan() mengembalikan nilai bertipe double yang
melakukan tugas menjumlahkan variable name teller, hrd, clerk (yang nilai kesemuanya sudah diisikan
setelah membuat instansasiasi dari objek dengan nama pimpinan dan swasta), sehingga menggunakan
return. Namu ada satu hal yang mengganjal, bagaimana jika membuatnya agar lebih bersifat dinamis
dan general. Artinya, method tersebut dapat mengembalikan nilai yang beragam sesuai dengan
parameter yang dilewatkannya. Sebenarnya kita tinggal mengisikan nilai didalam tanda kurung saat
pertama kali method terbentuk. Ada dua istilah yang perlu diketahui dalam bekerja dengan method,
10
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
yaitu parameter dan argumen. Yang pertama, parameter ialah nilai yang didefinsikan saat method
dibuat (seperti yang saya jelaskan sebelumnya), dan kedua, argumen ialah nilai yang didefinisikan saat
method dipanggil (“Biasanya” programmer menggunakannya didalam kelas utama). Kita
implementasikan hal ini nanti bersamaan ketika kita mencoba menggunakan constructor.
2.3 Constructor
Constructor adalah method khusus yang didefinisikan kedalam kelas dan akan dipanggil secara
otomatis setiap kali terjadi instansiasi objek. Constructor itu sendiri berfungsi untuk melakukan
inisialisasi nilai terhadap data-data yang terdapat pada kelas yang bersangkutan. Jika kita tidak
mendefinisikan constructor, maka java otomatis akan membuatkannya untuk kita dengan default
constructor atau menginisialisasi semua data dengan nilai nol. Perlu diingat bahwa saat kita
mendefinsikan suatu constructor kelas, constructor tidak memiliki tipe kembalian, tidak juga
void. Karena sebenarnya tipe kembalian dari constructor adalah tipe dari kelas (yang didalamya
menggunakan constructor) itu sendiri.
Perhatikan contoh berikut.
11
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
Pada kelas Bank kita membuat sebuah constructor dengan mengisi parameter yang akan
dilewatkan oleh nilai-nilai yang akan kita set didalam kelas utama saat pembentukkan objek/
instansiasi objek. Nah nilai-nilai inilah (yang direferensikan ke nama swasta dan pimpinan (yang
merupakan instansiasi dari kelas Bank)) yang kita pahami sebagai argumen. Method
hitungKaryawan() akan mengembalikan hasil penjumlahan dari nilai teller, hrd, dan clerk.
Kemudian saya berikan contoh bagaimana me-extends sebuah constructor.
Nah, saya harap kita sudah semakin paham. Kode diatas melukiskan konsep atau ciri inheritance
dari OOP dengan menurunkan kelas A ke dalam 2 kelas lainnya. Jika kita melakukan compile dan
running kode-kode diatas, maka akan mencetak ke monitor hasil sebagai berikut:
Saat membentuk objek dari kelas A
Constructor dari kelas A
Saat membentuk objek dari kelas B
Constructor dari kelas A
Constructor dari kelas B
Saat membentuk objek dari kelas C
Constructor dari kelas A
Constructor dari kelas B
12
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
Constructor dari kelas C
Saat membentuk objek dari kelas C, maka akan kita peroleh seluruh hasil, baik dari constructor A()
maupun B() yang telah di 'extends' oleh kelas C. Semoga ini lebih dari cukup untuk memberikan
gambaran konsep pemrograman berorientasi objek di java sebelum saya berikan thread sebagai topik
utamanya :) .
Catatan tambahan (Override dan Overload)
Overload : Saat mendefinisikan lebih dari satu method dalam sebuah kelas selama parameter
method tersebut BERBEDA. Baik tipe nya berbeda-nilainya sama, tipe nya sama-nilainya berbeda,
atau tipe dan nilainya berbeda. Misal (Kode berikut menggunakan method yang mengembalikan nilai):
Karena tipe dari 'x' adalah int, maka presisi tidak akan ditampilkan (bernilai 2). Berbeda halnya jika
kita menggunakan tipe double dalam pengoperasiannya.
Override : Saat mendefinisikan suatu method didalam kelas turunan yang nama dan daftar
parameternya SAMA PERSIS. Jika memanggil method yang telah di override melalui objek dari kelas
turunan, maka yang akan di eksekusi adalah method yang terdapat di kelas turunan. Method induk akan
disembunyikan di kelas turunan.
13
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
Dari kode-kode diatas, kita menurunkan kelas A ke kelas B dengan menggunakan nilai parameter
int nilai; yang sama persis didalam method setA() (method pertama) dan setB() (method kedua). Hasil
akhirnya, method yang digunakan didalam kelas utama (yakni obj.tampilkanNilai()) dengan
menginstansiasi dan mereferensi objek kelas B sebelumnya, akan mencetak hasil dari Nilai b: 200 ke
14
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
layar monitor. Semua atribut di kelas A seperti method setA(), getA(), dan tampilkanNilai() yang ada
akan di 'sembunyikan'. Bukankah jika kita me-extends atau mengimplementasikan konsep inheritance
di OOP semua sifat dari kelas A akan diturunkan ke kelas B ??? (lihat kembali hal.12), inilah override.
Tanpa saya beri contoh kembali pun kita sudah tahu bahwa jika kita 'membalik' keadaan dengan
menginstansiasi dan mereferensi objek ke kelas A pada kelas utama, maka akan muncul kesalahan
karena method berargumen, yakni setB() tidak pernah dimiliki kelas A sebelumnya.
3. THREAD
Sebenarnya ini yang saya suka, java menyediakan sebuah fitur yang sangat membantu dalam
pembentukan program yang lebih efisien dan pendayagunaan CPU secara maksimum, yaitu
multithread programming. Meskipun PHP yang kemudian telah support OOP dapat
mengimplementasikan hal ini dengan cara yang sama (sama-sama membentuk kelas Thread dan
function Thread()) dan memiliki pustaka-pustaka lain yang mendukung ini (kelas Multithread, function
Create(), isActive(), close(), tell(), listen(), dan lain-lain). Agar tidak menjadi bias, baik langsung saja
saya berikan sedikit pemaparannya.
Sebelumnya kita mengenal 2 istilah, yakni Multitasking dan Multithreading. Multitasking adalah
suatu istilah yang menjelaskan bahwa sebuah komputer dapat menjelaskan beberapa aktifitas (yang
sama atau berbeda) secara simultan/ bersamaan. Multitasking dibedakan menjadi dua macam, yaitu :
 Process-based multitasking
 Thread-based multitasking
Istilah process-based multitasking digunakan untuk sebuah aktifitas yang berjalan secara bersama-sama
dan hal ini berbasis pada sebuah proses (program atau aplikasi). Contoh : Anda yang menggunakan
linux OpenSuSE sedang menjalankan sebuah aplikasi Gambas, namun karena bosan dengan suasana,
anda kemudian menjalankan sebuah program Mplayer atau Cmus di konsol untuk mendengarkan lagu.
Sedangkan istilah thread-based multitasking digunakan untuk sebuah aktifitas yang berbasis pada
sebuah thread. Contoh : Anda yang sedang mengedit gambar di Gimp ingin melakukan kegiatan
mencetak atau send email dengan fitur yang dimiliki oleh Gimp tersebut. Hal tersebut dapat kita
lakukan karena dua pekerjaan tersebut (edisting dan printing atau sending email) dilakukan didalam
thread yang terpisah. Jika sebuah bahasa pemrograman tidak mendukung multithread, maka dua
pekerjaan tersebut tidak dapat dikerjakan secara bersama-sama. Kegiatan mencetak harus dilakukan
setelah selesai melakukan editing.
Process-based multitasking membutuhkan ruang memori yang berbeda untuk mengeksekusi setiap
aktifitas (proses). Setiap program atau aplikasi akan berjalan secara independen satu sama lain,
tersimpan pada masing-masing stack yang terpisah. Adapun Thread-based multitasking, adalah 'hanya
satu ruang memori' yang digunakan oleh setiap thread. Multitasking ini sendiri identik dengan proses-
proses yang sedang berjalan. Untuk Multithreading, kita lebih mengenalnya kepada sebuah thread-
thread.
Berikut Ilustrasi yang saya buat:
15
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
Thread adalah suatu bagian program (berupa runtunan kode) yang tidak bergantung pada bagian
lain dan dapat dijalankan secara bersama-sama. Ini artinya, suatu thread dapat diistirahatkan (paused)
tanpa harus menghentikan bagian lain atau keseluruhan program. Pada saat runtime, semua thread yang
16
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
ada di dalam program akan menempati ruang memori yang sama sehingga thread-thread tersebut dapat
berbagi data dan kode satu sama lain (Rahardjo, Budi, et al.2009).
3.1 Membuat Thread
Saya berikan contoh kode berikut.
Kode diatas mencoba menjelaskan bahwa setiap program thread di java memiliki sebuah thread
utama (main thread), dan thread ini merupakan induk dari thread-thread lain yang mungkin ada (nanti
dibuat) dalam program bersangkutan. Adapun thread-thread lain yang ada biasanya disebut child-
thread (thread anak). Pada contoh program, kita mendeklarasikan referensi dari kelas Thread dengan
nama tUtama. Sementara method currentThread() digunakan untuk menampung objek Thread yang
aktif sekaligus menampilkan informasi default thread. Namun kita bisa merubah informasi thread
tersebut dengan method setName(“Nama_Thread”). Pada baris terakhir, kita mencoba melakukan
perulangan untuk menampilkan teks tertentu dengan delay 1 detik.
Java mendefinisikan dua cara untuk membuat sebuah thread, yaitu dengan mengimplementasikan
interface Runnable atau dengan membuat kelas baru yang merupakan turunan dari kelas Thread. Saya
coba buatkan kode programnya.
17
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
Pada contoh diatas, mula-mula kita membuat objek dari kelas MyRunnable, yaitu kelas yang
mengimplementasikan interface Runnable. Selanjutnya di kelas utama, dibuatkan objek Thread baru
dengan cara melewatkannya kedalam constructor kelas Thread yang diberi argumen obj. Didalam
method run() kita mengisikan kode untuk proses yang akan dijalankan oleh thread yang bersangkutan.
Disini kita akan memperoleh hasil bahwa Thread anak dieksekusi, baru kemudian Thread Utama
di eksekusi.
Namun sebagai catatan, kebanyakan programmer java mengimplementasikan interface Runnable
ini dibandingkan dengan menurunkan kelas Thread. Karena alasan tersebut dan saya juga
mengimplmentasikan interface Runnable ini untuk optimisasi proses di lingkungan UNIX/ Linux (Inti
dari jurnal ini), maka pembahasannya saya batasi. Sebagai informasi, dari sisi desain dan
penggunaannya sendiri (apabila tidak memerlukan override di kode yang kita buat), maka interface
Runnable ini sama sekali tidak ada masalah jika kita gunakan ;) .
3.2 Menghentikan Thread
Thread yang dijalankan (didalam kode yang terdapat method run()) akan secara otomatis berhenti
ketika telah selesai dieksekusi. Namun kita diizinkan untuk menghentikan thread secara manual
dengan menggunakan method stop(). Berikut kode yang sedikit bisa menjelaskan.
18
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
Nah, saya coba tulis program diatas tidak dengan interface Runnable, namun dengan menurunkan
kelas Thread. Pada kelas utama, mula-mula kita coba menampilkan informasi bahwa Thread utama
telah dijalankan. Kemudian, setelah menginstansiasi dan mereferensikan objek MyThread ke variabel
dengan nama 't', kita coba jalankan thread anak tersebut (yang membawa seluruh operasi yang telah di
definisikan dan di set pada kelas Thread turunan) dengan menggunakan delay selama 1/40 detik.
Selanjutnya, pada kelas utama kita informasikan bahwa thread utama telah selesai dan pada kelas
turunan, thread anak selesai. Jika anda menjalankan kode ini, maka ada satu hal yang biasanya tidak
kita harapkan bahwa thread utama/ induk selesai terlebih dahulu daripada child-thread. Kita bisa
tangani hal ini kemudian.
19
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
Bagaimana jika kita menginginkan jumlah thread yang lebih dari dua ??, (pada contoh kode
program diatas, jumlah thread maksimal yang kita gunakan ada dua, yakni thread induk dan thread
anak). Jawabannya mudah, kita hanya tinggal membuat kelas turunan dari Thread sebanyak jumlah
thread yang diinginkan. Contoh berikut bisa anda simak.
Mudah sekali bukan, kode diatas akan mengeksekusi proses secara sequence hingga mencapai
20
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
posisi bahwa tiap-tiap proses tersebut selesai di eksekusi.
3.3 Method isAlive() dan join()
Seperti telah saya singgung sebelumnya bahwa kebanyakan kita pasti berharap bahwa thread
induk atau utama adalah thread terakhir yang seharusnya selesai dieksekusi setelah thread anak atau
turunannya selesai dieksekusi. Untuk melakukan hal tersebut, kita perlu memanggil method join() pada
semua thread anak. Kemudian apabila kita ingin mengetahui apakah suatu thread masih dalam keadaan
aktif atau tidak, kita dapat memanggil method isAlive().
21
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
Catatan : karena method join() ini akan benar-benar menunggu sampai objek thread pemanggil (ke
kelas turunan yang bersangkutan) benar-benar selesai dieksekusi, maka deklarasi throws
InterruptedException adalah sebuah kewajiban guna menjebak eksepsi.
3.4 Method untuk Sinkronisasi (Monitorl Lock, Semaphore)
Inilah salah satu dari banyak kelebihan luar biasa lainnya dari java. Seperti kita ketahui bahwa
thread-thread dalam sebuah kode program saling membagi ruang memori yang sama (berbeda dengan
sebuah proses, dimana alokasi memorinya dikonsumsi secara sendiri-sendiri), Pada saat thread yang
sama mengakses sebuah resource yang di share, maka perlu dilakukan sebuah cara untuk meyakinkan
bagaimana resource tersebut hanya digunakan oleh sebuah thread. Dalam arti, tidak ada thread yang
saling berebut resource hingga thread yang bersangkutan selesai atau melepas resource yang telah di
share. Kita lakukan hal ini guna mengimplementasikan konsep mutual exclusion (mutex) di Sistem
Operasi serta agar tidak terjadi deadlock. Sebegitu luar biasanya java bukan!?. Dengan menggunakan
kata kunci synchronized di kelas yang ingin kita gunakan, kembali saya berikan contoh kode program
22
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
untuk mendeskripsikan hal ini.
Hasil yang dicetak ke layar monitor adalah
…
[Contoh]
23
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
[Method]
[Sinkronisasi]
…
Bagaimana jika kita melepas kata kunci synchronized di method yang kita gunakan (pada method
test(String s)) ??. maka 'kekacauan' akan terjadi
…
[Sinkronisasi[Contoh[Method]
]
]
...
4. CARA YANG DITEMPUH
Tahap yang saya lakukan untuk mengimplementasikan teori diatas adalah :
1) Mengambil sebuah file berisi catatan-catatan transaksi atau logging dari sistem UNIX/ Linux
yang telah di kompresi dengan format .zip
2) Melakukan proses grep atau mengambil data (yang dibutuhkan dari sisi bisnis),
Sebagai catatan, grep disini bukanlah program yang ada di lingkungan UNIX/ Linux,
tetapi merupakan sebuah aktifitas pengambilan data secara manual (membaca,
mencari, dan menampilkan dengan memanfaatkan pustaka java Input/Output). Karena
jika saya gunakan langsung 'grep' yang sudah ada di lingkungan UNIX/ Linux, maka
konsep nya akan salah karena berarti dalam hal ini saya menjalankan beberapa proses
(process-based multitasking, bukan thread-based) dengan bantuan program 'grep'.
3) Menampilkan informasi aktif dan informasi selesai dari setiap kegiatan grep ini serta
penggunaan method synchronized guna meyakinkan bahwa konsep sinkronisasi telah berjalan.
24
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
5. PERUMUSAN DAN HASIL
25
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
26
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
Hasil yang dicetak ke layar monitor dari kode program diatas adalah
...
Thread Utama dijalankan
t1.getThread().isAlive() : true
t2.getThread().isAlive() : true
t3.getThread().isAlive() : true
These what u're looking for : GET /mo/index
These what u're looking for : status=16
These what u're looking for : status=16
These what u're looking for : GET /mo/index
These what u're looking for : harymu_ammar
These what u're looking for : GET /mo/index
These what u're looking for : status=16
These what u're looking for : GET /mo/index
Thread Grep Kedua selesai..
These what u're looking for : GET /mo/index
Thread Grep Pertama selesai..
27
Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28
These what u're looking for : GET /mo/index
These what u're looking for : GET /mo/index
Thread Grep Ketiga selesai..
t1.getThread().isAlive() : false
t2.getThread().isAlive() : false
t3.getThread().isAlive() : false
Thread Utama selesai
…
6. KESIMPULAN DAN SARAN
Kode program ini diharapkan menjadi solusi bagi para system administrator (khususnya di
lingkungan selain Windows) dalam memanajemen server dengan resources yang sangat terbatas. Ada
sebuah titik dimana pemrograman seperti shell script, perl, dan lainnya memiliki keterbatasan untuk
lebih 'dive' tentang cara bagaimana sistem operasi bekerja. Kode program dapat ditambah atau
disesuaikan dengan kebutuhan para system administrator seperti bagaimana jika kode mampu
membaca file transaksi dengan tanggal yang dinamis, dan sebagainya.
Saya sadari bahwa kode program tersebut masih memiliki kelemahan seperti belum mampu
membaca tipe file kompresi langsung dari aplikasi linux console seperti bzip2 -v9, zip, dsb. Sebagai
catatan, zip file didalam direktori /root/ tersebut adalah hasil kompresi dari tipe winzip.
Untuk itulah diharapkan kritik dan saran yang membangun untuk kode program diatas ke alamat
email saya yang telah dicantumkan sebelumnya. Semua kode sumber atau source code dapat di
download di situs saya di tifosilinux.wordpress.com. Terima Kasih.
DAFTAR PUSTAKA
Rahardjo, Budi, et al.2009.”Mudah Belajar JAVA”, Informatika, Bandung.
Corsika (2011). Should you synchronized the run method? Why or Why Not? (Forum
stackoverflow). From http://stackoverflow.com/questions/7313657/should-you-synchronize-
the-run-method-why-or-why-not, 6 July 2014
Jurnal ini ditulis dengan :
PCLinuxOS release 2011 arch i586, Apache OpenOffice 4.01, Dia 0.97.2, java version 1.7.0_45
28

More Related Content

What's hot

Pemograman berorientasi obyek kelompok 6
Pemograman berorientasi obyek kelompok 6Pemograman berorientasi obyek kelompok 6
Pemograman berorientasi obyek kelompok 6
ゴースト アノン
 
Network Programming 2 - Dasar Pemrograman Java
Network Programming 2 - Dasar Pemrograman JavaNetwork Programming 2 - Dasar Pemrograman Java
Network Programming 2 - Dasar Pemrograman Java
Lia Rusdyana Dewi
 
Pertemuan 1
Pertemuan 1Pertemuan 1
Pertemuan 1
zisgoo
 
02. prak.-pemrograman-berorientasi-objek
02. prak.-pemrograman-berorientasi-objek02. prak.-pemrograman-berorientasi-objek
02. prak.-pemrograman-berorientasi-objek
Jamil Jamil
 
Network programming 03- Pemrograman Java Lanjutan
Network programming 03- Pemrograman Java LanjutanNetwork programming 03- Pemrograman Java Lanjutan
Network programming 03- Pemrograman Java Lanjutan
Lia Rusdyana Dewi
 
Laporan PBO pratikum 2
Laporan PBO pratikum 2Laporan PBO pratikum 2
Laporan PBO pratikum 2
rahmi wahyuni
 
Java (Netbeans) - Class, Constructor, Object (Object Oriented Programming)
Java (Netbeans) - Class, Constructor, Object (Object Oriented Programming)Java (Netbeans) - Class, Constructor, Object (Object Oriented Programming)
Java (Netbeans) - Class, Constructor, Object (Object Oriented Programming)
Melina Krisnawati
 
Java (Netbeans) - Abstract & Interface - Object Oriented Programming
Java (Netbeans) - Abstract & Interface - Object Oriented ProgrammingJava (Netbeans) - Abstract & Interface - Object Oriented Programming
Java (Netbeans) - Abstract & Interface - Object Oriented Programming
Melina Krisnawati
 
Jeni Intro1 Bab10 Membuat Class Sendiri
Jeni Intro1 Bab10 Membuat Class SendiriJeni Intro1 Bab10 Membuat Class Sendiri
Jeni Intro1 Bab10 Membuat Class Sendiri
Individual Consultants
 
Laporan PBO Pratikum 3
Laporan PBO Pratikum 3Laporan PBO Pratikum 3
Laporan PBO Pratikum 3
rahmi wahyuni
 

What's hot (19)

Pemograman berorientasi obyek kelompok 6
Pemograman berorientasi obyek kelompok 6Pemograman berorientasi obyek kelompok 6
Pemograman berorientasi obyek kelompok 6
 
Network Programming 2 - Dasar Pemrograman Java
Network Programming 2 - Dasar Pemrograman JavaNetwork Programming 2 - Dasar Pemrograman Java
Network Programming 2 - Dasar Pemrograman Java
 
Pertemuan 1
Pertemuan 1Pertemuan 1
Pertemuan 1
 
02. prak.-pemrograman-berorientasi-objek
02. prak.-pemrograman-berorientasi-objek02. prak.-pemrograman-berorientasi-objek
02. prak.-pemrograman-berorientasi-objek
 
Pertemuan 1 konsep dasar pemrograman berorientasi objek
Pertemuan 1 konsep dasar pemrograman berorientasi objekPertemuan 1 konsep dasar pemrograman berorientasi objek
Pertemuan 1 konsep dasar pemrograman berorientasi objek
 
Network programming 03- Pemrograman Java Lanjutan
Network programming 03- Pemrograman Java LanjutanNetwork programming 03- Pemrograman Java Lanjutan
Network programming 03- Pemrograman Java Lanjutan
 
Laporan PBO pratikum 2
Laporan PBO pratikum 2Laporan PBO pratikum 2
Laporan PBO pratikum 2
 
Java (Netbeans) - Class, Constructor, Object (Object Oriented Programming)
Java (Netbeans) - Class, Constructor, Object (Object Oriented Programming)Java (Netbeans) - Class, Constructor, Object (Object Oriented Programming)
Java (Netbeans) - Class, Constructor, Object (Object Oriented Programming)
 
Tugas Praktikum Pemrograman Berorientasi Objek
Tugas Praktikum Pemrograman Berorientasi ObjekTugas Praktikum Pemrograman Berorientasi Objek
Tugas Praktikum Pemrograman Berorientasi Objek
 
Laporan Modul 1 Praktikum Pemrograman Berbasis Objek
Laporan Modul 1 Praktikum Pemrograman Berbasis ObjekLaporan Modul 1 Praktikum Pemrograman Berbasis Objek
Laporan Modul 1 Praktikum Pemrograman Berbasis Objek
 
Mi 04.-praktikum-pemrograman-berorientasi-objek
Mi 04.-praktikum-pemrograman-berorientasi-objekMi 04.-praktikum-pemrograman-berorientasi-objek
Mi 04.-praktikum-pemrograman-berorientasi-objek
 
Java (Netbeans) - Abstract & Interface - Object Oriented Programming
Java (Netbeans) - Abstract & Interface - Object Oriented ProgrammingJava (Netbeans) - Abstract & Interface - Object Oriented Programming
Java (Netbeans) - Abstract & Interface - Object Oriented Programming
 
Jeni Intro1 Bab10 Membuat Class Sendiri
Jeni Intro1 Bab10 Membuat Class SendiriJeni Intro1 Bab10 Membuat Class Sendiri
Jeni Intro1 Bab10 Membuat Class Sendiri
 
Pengantar Pemrograman Berorientasi Objek
Pengantar Pemrograman Berorientasi ObjekPengantar Pemrograman Berorientasi Objek
Pengantar Pemrograman Berorientasi Objek
 
31322 2 class & object
31322 2 class & object31322 2 class & object
31322 2 class & object
 
[PBO] Pertemuan 10 - Generic Programming & Collection
[PBO] Pertemuan 10 - Generic Programming & Collection[PBO] Pertemuan 10 - Generic Programming & Collection
[PBO] Pertemuan 10 - Generic Programming & Collection
 
Pemrograman Berorientasi Objek "Pengenalan JAVA"
Pemrograman Berorientasi Objek "Pengenalan JAVA"Pemrograman Berorientasi Objek "Pengenalan JAVA"
Pemrograman Berorientasi Objek "Pengenalan JAVA"
 
Laporan PBO Pratikum 3
Laporan PBO Pratikum 3Laporan PBO Pratikum 3
Laporan PBO Pratikum 3
 
Pemrograman Berorientasi Objek "Pengenalan Dasar Pemrograman JAVA"
Pemrograman Berorientasi Objek "Pengenalan Dasar Pemrograman JAVA"Pemrograman Berorientasi Objek "Pengenalan Dasar Pemrograman JAVA"
Pemrograman Berorientasi Objek "Pengenalan Dasar Pemrograman JAVA"
 

Viewers also liked (9)

Belajar Java Programming
Belajar Java ProgrammingBelajar Java Programming
Belajar Java Programming
 
Fajar Satrio Java
Fajar Satrio JavaFajar Satrio Java
Fajar Satrio Java
 
JAVA
JAVAJAVA
JAVA
 
Materi operator java
Materi operator javaMateri operator java
Materi operator java
 
Pemrograman Berorientasi Objek dengan Java
Pemrograman Berorientasi Objek dengan JavaPemrograman Berorientasi Objek dengan Java
Pemrograman Berorientasi Objek dengan Java
 
Object oriented programming menggunakan java
Object oriented programming menggunakan javaObject oriented programming menggunakan java
Object oriented programming menggunakan java
 
Pp pbo-130802070700-phpapp02
Pp pbo-130802070700-phpapp02Pp pbo-130802070700-phpapp02
Pp pbo-130802070700-phpapp02
 
SIstem Informasi Pemesanan Barang - Wulanda Anggoro
SIstem Informasi Pemesanan Barang - Wulanda AnggoroSIstem Informasi Pemesanan Barang - Wulanda Anggoro
SIstem Informasi Pemesanan Barang - Wulanda Anggoro
 
Soal pra-uas (1)
Soal pra-uas (1)Soal pra-uas (1)
Soal pra-uas (1)
 

Similar to Panduan Java sebagai Pemrograman Berorientasi Objek dan Implementasi Thread

JENI-Intro1-Bab09-Bekerja Dengan Java Class Library.pdf
JENI-Intro1-Bab09-Bekerja Dengan Java Class Library.pdfJENI-Intro1-Bab09-Bekerja Dengan Java Class Library.pdf
JENI-Intro1-Bab09-Bekerja Dengan Java Class Library.pdf
Jurnal IT
 
Abu yanto tugas resume aplinet
Abu yanto tugas resume aplinetAbu yanto tugas resume aplinet
Abu yanto tugas resume aplinet
abuyanto
 
Tugas 4 (individu) rekayasa web 0316
Tugas 4 (individu) rekayasa web 0316Tugas 4 (individu) rekayasa web 0316
Tugas 4 (individu) rekayasa web 0316
septianarul
 

Similar to Panduan Java sebagai Pemrograman Berorientasi Objek dan Implementasi Thread (20)

JENI-Intro1-Bab09-Bekerja Dengan Java Class Library.pdf
JENI-Intro1-Bab09-Bekerja Dengan Java Class Library.pdfJENI-Intro1-Bab09-Bekerja Dengan Java Class Library.pdf
JENI-Intro1-Bab09-Bekerja Dengan Java Class Library.pdf
 
Abu yanto tugas resume aplinet
Abu yanto tugas resume aplinetAbu yanto tugas resume aplinet
Abu yanto tugas resume aplinet
 
Uts pemrograman berbasis obj
Uts pemrograman berbasis objUts pemrograman berbasis obj
Uts pemrograman berbasis obj
 
Modul pbo
Modul pboModul pbo
Modul pbo
 
Materi delphi
Materi delphiMateri delphi
Materi delphi
 
Resume aplinet
Resume aplinetResume aplinet
Resume aplinet
 
Tugas Rekayasa Web instilah pada pemrograman java
Tugas Rekayasa Web instilah pada pemrograman javaTugas Rekayasa Web instilah pada pemrograman java
Tugas Rekayasa Web instilah pada pemrograman java
 
T1 - Konsep Pemrograman Berorientasi Obyek.ppt
T1 - Konsep Pemrograman Berorientasi Obyek.pptT1 - Konsep Pemrograman Berorientasi Obyek.ppt
T1 - Konsep Pemrograman Berorientasi Obyek.ppt
 
Tugas 4 (individu) rekayasa web 0316
Tugas 4 (individu) rekayasa web 0316Tugas 4 (individu) rekayasa web 0316
Tugas 4 (individu) rekayasa web 0316
 
Pengantar Pengembangan Sistem Berorientasi Objek.pptx
Pengantar Pengembangan Sistem Berorientasi Objek.pptxPengantar Pengembangan Sistem Berorientasi Objek.pptx
Pengantar Pengembangan Sistem Berorientasi Objek.pptx
 
Materi-1-sd-2-Pengenalan-PBO.pptx
Materi-1-sd-2-Pengenalan-PBO.pptxMateri-1-sd-2-Pengenalan-PBO.pptx
Materi-1-sd-2-Pengenalan-PBO.pptx
 
Apsi 2
Apsi 2Apsi 2
Apsi 2
 
Part 8 - Object Oriented Programming
Part 8 - Object Oriented ProgrammingPart 8 - Object Oriented Programming
Part 8 - Object Oriented Programming
 
Kk 14
Kk 14Kk 14
Kk 14
 
Resume tentang oop dalam php
Resume tentang oop dalam phpResume tentang oop dalam php
Resume tentang oop dalam php
 
Modul 2 pbo
Modul 2 pboModul 2 pbo
Modul 2 pbo
 
0-Pengantar Pemrograman lanjut.pptx
0-Pengantar Pemrograman lanjut.pptx0-Pengantar Pemrograman lanjut.pptx
0-Pengantar Pemrograman lanjut.pptx
 
Part 9 - Object Oriented Programming Lanjutan
Part 9 - Object Oriented Programming LanjutanPart 9 - Object Oriented Programming Lanjutan
Part 9 - Object Oriented Programming Lanjutan
 
8. konsep class, object dan method
8. konsep class, object dan method8. konsep class, object dan method
8. konsep class, object dan method
 
Tugas aplinet meresum
Tugas aplinet meresumTugas aplinet meresum
Tugas aplinet meresum
 

More from Hary HarysMatta

Membangun Aplikasi Web Data Analysis dengan Framework Django
Membangun Aplikasi Web Data Analysis dengan Framework DjangoMembangun Aplikasi Web Data Analysis dengan Framework Django
Membangun Aplikasi Web Data Analysis dengan Framework Django
Hary HarysMatta
 
Ayat jurnal penyesuaian dan ayat jurnal balik
Ayat jurnal penyesuaian dan ayat jurnal balikAyat jurnal penyesuaian dan ayat jurnal balik
Ayat jurnal penyesuaian dan ayat jurnal balik
Hary HarysMatta
 
Metode Praktis Penetapan Nisab Zakat
Metode Praktis Penetapan Nisab ZakatMetode Praktis Penetapan Nisab Zakat
Metode Praktis Penetapan Nisab Zakat
Hary HarysMatta
 

More from Hary HarysMatta (17)

Strongswan ipsec vpn_linux_strongswan_ip
Strongswan ipsec vpn_linux_strongswan_ipStrongswan ipsec vpn_linux_strongswan_ip
Strongswan ipsec vpn_linux_strongswan_ip
 
Letsencrypt with pfsense
Letsencrypt with pfsenseLetsencrypt with pfsense
Letsencrypt with pfsense
 
Membangun Aplikasi Web Data Analysis dengan Framework Django
Membangun Aplikasi Web Data Analysis dengan Framework DjangoMembangun Aplikasi Web Data Analysis dengan Framework Django
Membangun Aplikasi Web Data Analysis dengan Framework Django
 
GA (Google Analytics) Masterclass
GA (Google Analytics) MasterclassGA (Google Analytics) Masterclass
GA (Google Analytics) Masterclass
 
Pengantar jaringan komputer
Pengantar jaringan komputerPengantar jaringan komputer
Pengantar jaringan komputer
 
Ayat jurnal penyesuaian dan ayat jurnal balik
Ayat jurnal penyesuaian dan ayat jurnal balikAyat jurnal penyesuaian dan ayat jurnal balik
Ayat jurnal penyesuaian dan ayat jurnal balik
 
Ikhtisar pengantar akuntansi dan manajemen keuangan2
Ikhtisar pengantar akuntansi dan manajemen keuangan2Ikhtisar pengantar akuntansi dan manajemen keuangan2
Ikhtisar pengantar akuntansi dan manajemen keuangan2
 
Cluster management (supercomputer)
Cluster management (supercomputer)Cluster management (supercomputer)
Cluster management (supercomputer)
 
Update - Superkomputer dengan Native GNU/ Linux - Final
Update - Superkomputer dengan Native GNU/ Linux - FinalUpdate - Superkomputer dengan Native GNU/ Linux - Final
Update - Superkomputer dengan Native GNU/ Linux - Final
 
Superkomputer dengan Native Linux(encrypted)
Superkomputer dengan Native Linux(encrypted)Superkomputer dengan Native Linux(encrypted)
Superkomputer dengan Native Linux(encrypted)
 
Esensi Sholat Berjama'ah
Esensi Sholat Berjama'ahEsensi Sholat Berjama'ah
Esensi Sholat Berjama'ah
 
Vcenter Server Appliance - Testing
Vcenter Server Appliance - TestingVcenter Server Appliance - Testing
Vcenter Server Appliance - Testing
 
Cloud Computing Dengan VMWARE
Cloud Computing Dengan VMWARECloud Computing Dengan VMWARE
Cloud Computing Dengan VMWARE
 
Panduan Evaluasi Sholat dan Hadits Shahih - Mengevaluasi Cara Sholat Kita
Panduan Evaluasi Sholat dan Hadits Shahih - Mengevaluasi Cara Sholat KitaPanduan Evaluasi Sholat dan Hadits Shahih - Mengevaluasi Cara Sholat Kita
Panduan Evaluasi Sholat dan Hadits Shahih - Mengevaluasi Cara Sholat Kita
 
Implementasi Kannel dengan modem Wavecom di Linux OpenSuSE 11.2
Implementasi Kannel dengan modem Wavecom di Linux OpenSuSE 11.2Implementasi Kannel dengan modem Wavecom di Linux OpenSuSE 11.2
Implementasi Kannel dengan modem Wavecom di Linux OpenSuSE 11.2
 
Mengenal ORACLE PL/ SQL
Mengenal ORACLE PL/ SQLMengenal ORACLE PL/ SQL
Mengenal ORACLE PL/ SQL
 
Metode Praktis Penetapan Nisab Zakat
Metode Praktis Penetapan Nisab ZakatMetode Praktis Penetapan Nisab Zakat
Metode Praktis Penetapan Nisab Zakat
 

Panduan Java sebagai Pemrograman Berorientasi Objek dan Implementasi Thread

  • 1. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 MENGENAL JAVA SEBAGAI PEMROGRAMAN BERORIENTASI OBJEK DAN IMPLEMENTASI THREAD DI LINGKUNGAN UNIX/ LINUX Hary Cahyono System Administrator, tifosilinux.wordpress.com Fakultas Manajemen, Universitas Persada Indonesia – YAI Email : h4ry.oop@gmail.com, harymu_ammar@yahoo.com Jl. Diponegoro No. 74, Jakarta Pusat, DKI Jakarta ABSTRAK Sebagian besar sistem administrator menggunakan cronjobs sebagai program yang handal dalam mengimplementasikan manajemen proses di lingkungan UNIX/ Linux. Layaknya program task scheduler di lingkungan Windows, cronjobs mampu mengatur waktu proses agar berjalan sesuai dengan prioritas waktu. Tidak ada fitur lebih selain fleksibilitas waktu dalam menjalankan script baik itu program php, shell script, perl, atau yang lainnya. Java hadir dengan variasi fiturnya untuk memperluas penanganan jalannya berbagai task di sistem operasi. Dengan pemahaman sebelumnya akan konsep pemrograman berorientasi objek dan lingkungan UNIX/ Linux, kita bisa mengimplementasikan thread di java sebagai sebuah solusi. Kata kunci : Java, UNIX/ Linux, Thread, Pemrograman Berorientasi Objek ABSTRACT The majority of system administrators are using cronjobs as a reliable program to implementing process management in UNIX/ Linux environment. Cronjobs able to set the time that the process runs according to time priority. I see no more features beside the flexibility of time either php script, shell scripts, perl, or others. Java comes with its variation to extend the course of handling a variety of tasks in OS. First, begin to understanding the concepts of Object Oriented Programming and Unix/ Linux Fundamental, we can implement a thread in java as a solution. Keywords : Java, UNIX/ Linux, Thread, Object Oriented Programming. 1
  • 2. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 1. PENDAHULUAN Sebuah kendala yang sering dialami seorang system administrator adalah ketika ia harus bisa mengoptimalkan sistem dengan resource yang terbatas. Ketika sebuah traffic yang menjadikan load server begitu tinggi namun banyak proses yang 'terdaftar' di cronjobs akan menjadi sebuah dilema. Belum lagi ditambah aspek-aspek lain semisal keterbatasan memori, service tunning (Apache Web Server, MySQL) yang kurang baik hingga rule firewall atau routing dan masih banyak lagi. Untuk dapat mengimplementasikan thread di java, seseorang terlebih dahulu harus memahami konsep pemrograman berorientasi objek (OOP), multitasking dalam sistem operasi, penerapan shell script atau program-program lain yang mendukung semisal php (lewat argumen -q), perl, ruby, atau lainnya. Tidak seperti sebagian besar bahasa pemrograman lain pada umumnya, java menyediakan fitur tambahan yang sangat membantu dalam pembentukan program yang lebih efisien dan pendayagunaan CPU secara maksimum, yaitu multithreaded programming. Ini artinya, dalam sebuah program java, kita diizinkan untuk membentuk lebih dari satu thread, me-set prioritas dari thread tersebut, dan mengalokasikan resource dari CPU yang sesuai dan optimal (Rahardjo, Budi, et al.2009). Untuk itu, pemahaman akan OOP, lingkungan UNIX/ Linux, dan konsep dari 2 kategori multitasking yang kelak kita pilih nanti di sistem operasi dapat kita terapkan sebagai salah satu solusi dari masalah yang dihadapi. 2. Kelas, Objek, Method, dan Constructor Seperti yang kita ketahui, baik di pemrograman PHP (yang juga sudah mendukung OOP), konsep OOP memiliki ciri Abstraksi (abstraction), pembungkusan (encapsulation), pewarisan (inherintance), dan kebanyakrupaan (polymorphism). 2.1 Kelas dan Objek Kelas merupakan inti dari pemrograman java, ketika kita pertama kali membuat program 'Halo Dunia' misalnya : ... class EmployeeBank{ public static void main(String[] args){ System.out.println(”Hello World”); } } … Dari potongan kode diatas, sebenarnya kita sudah menggunakan kelas namun masih sangat minim sekali yakni kelas utama (program utama) yang didalamnya mengandung method main(). Selanjutnya konsep enkapsulasi dapat kita lihat ketika mengguakan public (atau bisa juga private, maupun protected) pada kelas EmployeeBank tersebut. Kelas dapat didefinisikan sebagai blueprint atau 2
  • 3. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 prototipe/ kerangka yang didalamnya mendefinisikan variabel-variabel (data), method, constructor, dan lainnya. Contoh : Mobil memiliki data seperti warna, tahun, merk, tipe, nomor polisi dan sebagainya. Disamping itu mobil juga memiliki beberapa perilaku spesifik seperti sistem pengereman, persneling, dan sebagainya. Dalam program, objek semacam ini dapar didefinisikan sebagai sebuah kelas. Namun perlu diingat bahwa kelas masih bersifat abstrak, kelas hanya merupakan template (pola) untuk membuat objek, dan objek adalah wujud nyata (instance) dari sebuah kelas. Ketika kita mendefinisikan suatu kelas, kita hanya membuat tipe data baru, bukan membuat objek baru. Contoh : Manusia adalah kelas, sedangkan objek atau wujud nyata dari kelas manusia adalah Hary, Fatih, Linus, dan lainnya. Baik, kita langsung buat contoh-contoh riil nya. Dari kode diatas sebenarnya bisa kita pecah kedalam dua buah file dimana file pertama berisikan kelas dari class Bank1() (dengan nama Bank1.java) dan file kedua (dengan nama DemoBank1.java). Setelah kita compile dengan javac <nama_file>.java, tinggal kita jalankan dengan java <nama_file_kelas_utama>. Tipe double teller; double hrd; dan double clerk; merupakan tipe-tipe variabel atau instance variable. 3
  • 4. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 Kode diatas menjelaskan bahwa setiap objek (disini kita membentuk dua objek dari kelas Bank2 dengan nama swasta dan pimpinan) atau instance memiliki salinan data sendiri-sendiri, artinya ketika kita tampilkan ke layar monitor dengan memanggil object_instance.instance_variable (Contoh : pimpinan.teller) akan menampilkan nilai nya masing-masing (pimpinan.teller memiliki nilai 1). Nah, agar menambah pemahaman kita saat mendeklarasikan 'objek' dan bagaimana menyimpan sebuah referensi, didalam sebuah konsep OOP saya buat contoh sebagai berikut. 4
  • 5. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 Pada kode diatas saya buatkan 2 buah variabel, yakni swasta dan pimpinan yang 'mereferensi' ke objek Bank (dimana nama sebuah objek haruslah identik dengan nama kelas yang digunakan tanpa menggunakan kurung buka dan kurung tutup, kelas → Bank; objek → Bank). Kemudian kita instansiasi objek Bank (barulah disini kita menggunakan kurung buka dan kurung tutup) dan memasukkan referensinya ke sebuah variabel dengan nama swasta. Tanpa melakukan re-instansiasi, kita coba masukkan variabel swasta tersebut (yang telah diinstansiasi dengan membawa objek Bank) kedalam variabel baru yang bernama pimpinan. Hal ini guna membuktikan bahwa meskipun dua nama tersebut menunjuk ke objek yang sama, namun tidak terdapat hubungan sama sekali antara swasta dan pimpinan, sehingga kita bisa melepas salah satunya untuk menunjuk ke objek lain tanpa 5
  • 6. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 mempengaruhi variabel yang lainnya. Saat kita lakukan operasi penjumlahan dengan sebelumnya memanggil objek yang telah dimiliki oleh dua variabel (yakni pimpinan dan swasta. Kode : pimpinan.teller, swasta.teller, pimpinan.hrd, swasta.hrd, dst), maka program akan menampilkan nilai yang sama ke monitor. Number person1 : 10.0 Number person2 : 10.0 Masih kurang jelas juga ?. Oke saya buat kembali. :) 6
  • 7. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 Maksud dari alur kode program diatas adalah untuk menunjukkan bahwa ketika kita memindahkan salah satu variabel (yakni variabel swasta) untuk menunjuk variabel lain (pada contoh kode, kita menginstansiasi kembali objek baru yang mereferensi ke variabel swasta). Maka hasil yang dicetak ke layar monitor adalah: Sebelum nilai swasta diubah Jumlah number person 1 : 28.0 Jumlah number person 2 : 28.0 Sebelum nilai swasta diubah Jumlah number person 1 : 6.0 Jumlah number person 2 : 28.0 Sekarang kita coba memahami penurunan kelas atau extends dari kelas yang kita buat sebelumnya. 7
  • 8. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 Kode diatas menjelaskan bahwa kelas B merupakan kelas turunan dari kelas A (ditandai dengan nama extends). Akibatnya, kelas B akan mewarisi sifat-sifat dari kelas A. Dari contoh tersebut, kita membuat sebuah objek dari kelas B di main class (class DemoExtends), kenyataanya objek tersebut “juga” memiliki method-method setA(nilai); dan getA(nilai); yang dipanggil menggunakan instance objek dari kelas B tersebut. Disinilah kita menerapkan konsep inheritance atau pewarisan sifat serta polymorphism dimana 'seperti' terdapat kemampuan untuk mengungkapkan banyak hal melalui satu cara yang sama (dalam contoh ini, kita menjalankan method di A hanya dari objek yang diistansiasi dari kelas B) yang merupakan ciri dari OOP. Oke, berikutnya kita akan mencoba mengupas sedikit tentang method di java. 2.2 Method Kelas juga berisikan kumpulan-kumpulan dari method yang akan saling bekerja sama melakukan tugas-tugas spesifik tertentu sesuai dari perilaku objek yang dimodelkan. Kita lihat contoh kode-kode berikut. 8
  • 9. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 Method (perilaku) terbagi dua macam, yakni method void yang tidak mengembalikan nilai kedalam kelas utamanya (tidak menggunakan return nilai) dan method non-void yang mengembalikan nilai. Dari kode diatas, kita mencoba membuat sebuah method CetakKaryawan() yang tidak mengembalikan nilai (sehingga tidak menggunakan return). Sekarang coba perhatikan kode-kode berikut yang menggunakan method yang mengembalikan nilai. 9
  • 10. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 Dari kode tersebut, method HitungKaryawan() mengembalikan nilai bertipe double yang melakukan tugas menjumlahkan variable name teller, hrd, clerk (yang nilai kesemuanya sudah diisikan setelah membuat instansasiasi dari objek dengan nama pimpinan dan swasta), sehingga menggunakan return. Namu ada satu hal yang mengganjal, bagaimana jika membuatnya agar lebih bersifat dinamis dan general. Artinya, method tersebut dapat mengembalikan nilai yang beragam sesuai dengan parameter yang dilewatkannya. Sebenarnya kita tinggal mengisikan nilai didalam tanda kurung saat pertama kali method terbentuk. Ada dua istilah yang perlu diketahui dalam bekerja dengan method, 10
  • 11. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 yaitu parameter dan argumen. Yang pertama, parameter ialah nilai yang didefinsikan saat method dibuat (seperti yang saya jelaskan sebelumnya), dan kedua, argumen ialah nilai yang didefinisikan saat method dipanggil (“Biasanya” programmer menggunakannya didalam kelas utama). Kita implementasikan hal ini nanti bersamaan ketika kita mencoba menggunakan constructor. 2.3 Constructor Constructor adalah method khusus yang didefinisikan kedalam kelas dan akan dipanggil secara otomatis setiap kali terjadi instansiasi objek. Constructor itu sendiri berfungsi untuk melakukan inisialisasi nilai terhadap data-data yang terdapat pada kelas yang bersangkutan. Jika kita tidak mendefinisikan constructor, maka java otomatis akan membuatkannya untuk kita dengan default constructor atau menginisialisasi semua data dengan nilai nol. Perlu diingat bahwa saat kita mendefinsikan suatu constructor kelas, constructor tidak memiliki tipe kembalian, tidak juga void. Karena sebenarnya tipe kembalian dari constructor adalah tipe dari kelas (yang didalamya menggunakan constructor) itu sendiri. Perhatikan contoh berikut. 11
  • 12. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 Pada kelas Bank kita membuat sebuah constructor dengan mengisi parameter yang akan dilewatkan oleh nilai-nilai yang akan kita set didalam kelas utama saat pembentukkan objek/ instansiasi objek. Nah nilai-nilai inilah (yang direferensikan ke nama swasta dan pimpinan (yang merupakan instansiasi dari kelas Bank)) yang kita pahami sebagai argumen. Method hitungKaryawan() akan mengembalikan hasil penjumlahan dari nilai teller, hrd, dan clerk. Kemudian saya berikan contoh bagaimana me-extends sebuah constructor. Nah, saya harap kita sudah semakin paham. Kode diatas melukiskan konsep atau ciri inheritance dari OOP dengan menurunkan kelas A ke dalam 2 kelas lainnya. Jika kita melakukan compile dan running kode-kode diatas, maka akan mencetak ke monitor hasil sebagai berikut: Saat membentuk objek dari kelas A Constructor dari kelas A Saat membentuk objek dari kelas B Constructor dari kelas A Constructor dari kelas B Saat membentuk objek dari kelas C Constructor dari kelas A Constructor dari kelas B 12
  • 13. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 Constructor dari kelas C Saat membentuk objek dari kelas C, maka akan kita peroleh seluruh hasil, baik dari constructor A() maupun B() yang telah di 'extends' oleh kelas C. Semoga ini lebih dari cukup untuk memberikan gambaran konsep pemrograman berorientasi objek di java sebelum saya berikan thread sebagai topik utamanya :) . Catatan tambahan (Override dan Overload) Overload : Saat mendefinisikan lebih dari satu method dalam sebuah kelas selama parameter method tersebut BERBEDA. Baik tipe nya berbeda-nilainya sama, tipe nya sama-nilainya berbeda, atau tipe dan nilainya berbeda. Misal (Kode berikut menggunakan method yang mengembalikan nilai): Karena tipe dari 'x' adalah int, maka presisi tidak akan ditampilkan (bernilai 2). Berbeda halnya jika kita menggunakan tipe double dalam pengoperasiannya. Override : Saat mendefinisikan suatu method didalam kelas turunan yang nama dan daftar parameternya SAMA PERSIS. Jika memanggil method yang telah di override melalui objek dari kelas turunan, maka yang akan di eksekusi adalah method yang terdapat di kelas turunan. Method induk akan disembunyikan di kelas turunan. 13
  • 14. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 Dari kode-kode diatas, kita menurunkan kelas A ke kelas B dengan menggunakan nilai parameter int nilai; yang sama persis didalam method setA() (method pertama) dan setB() (method kedua). Hasil akhirnya, method yang digunakan didalam kelas utama (yakni obj.tampilkanNilai()) dengan menginstansiasi dan mereferensi objek kelas B sebelumnya, akan mencetak hasil dari Nilai b: 200 ke 14
  • 15. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 layar monitor. Semua atribut di kelas A seperti method setA(), getA(), dan tampilkanNilai() yang ada akan di 'sembunyikan'. Bukankah jika kita me-extends atau mengimplementasikan konsep inheritance di OOP semua sifat dari kelas A akan diturunkan ke kelas B ??? (lihat kembali hal.12), inilah override. Tanpa saya beri contoh kembali pun kita sudah tahu bahwa jika kita 'membalik' keadaan dengan menginstansiasi dan mereferensi objek ke kelas A pada kelas utama, maka akan muncul kesalahan karena method berargumen, yakni setB() tidak pernah dimiliki kelas A sebelumnya. 3. THREAD Sebenarnya ini yang saya suka, java menyediakan sebuah fitur yang sangat membantu dalam pembentukan program yang lebih efisien dan pendayagunaan CPU secara maksimum, yaitu multithread programming. Meskipun PHP yang kemudian telah support OOP dapat mengimplementasikan hal ini dengan cara yang sama (sama-sama membentuk kelas Thread dan function Thread()) dan memiliki pustaka-pustaka lain yang mendukung ini (kelas Multithread, function Create(), isActive(), close(), tell(), listen(), dan lain-lain). Agar tidak menjadi bias, baik langsung saja saya berikan sedikit pemaparannya. Sebelumnya kita mengenal 2 istilah, yakni Multitasking dan Multithreading. Multitasking adalah suatu istilah yang menjelaskan bahwa sebuah komputer dapat menjelaskan beberapa aktifitas (yang sama atau berbeda) secara simultan/ bersamaan. Multitasking dibedakan menjadi dua macam, yaitu :  Process-based multitasking  Thread-based multitasking Istilah process-based multitasking digunakan untuk sebuah aktifitas yang berjalan secara bersama-sama dan hal ini berbasis pada sebuah proses (program atau aplikasi). Contoh : Anda yang menggunakan linux OpenSuSE sedang menjalankan sebuah aplikasi Gambas, namun karena bosan dengan suasana, anda kemudian menjalankan sebuah program Mplayer atau Cmus di konsol untuk mendengarkan lagu. Sedangkan istilah thread-based multitasking digunakan untuk sebuah aktifitas yang berbasis pada sebuah thread. Contoh : Anda yang sedang mengedit gambar di Gimp ingin melakukan kegiatan mencetak atau send email dengan fitur yang dimiliki oleh Gimp tersebut. Hal tersebut dapat kita lakukan karena dua pekerjaan tersebut (edisting dan printing atau sending email) dilakukan didalam thread yang terpisah. Jika sebuah bahasa pemrograman tidak mendukung multithread, maka dua pekerjaan tersebut tidak dapat dikerjakan secara bersama-sama. Kegiatan mencetak harus dilakukan setelah selesai melakukan editing. Process-based multitasking membutuhkan ruang memori yang berbeda untuk mengeksekusi setiap aktifitas (proses). Setiap program atau aplikasi akan berjalan secara independen satu sama lain, tersimpan pada masing-masing stack yang terpisah. Adapun Thread-based multitasking, adalah 'hanya satu ruang memori' yang digunakan oleh setiap thread. Multitasking ini sendiri identik dengan proses- proses yang sedang berjalan. Untuk Multithreading, kita lebih mengenalnya kepada sebuah thread- thread. Berikut Ilustrasi yang saya buat: 15
  • 16. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 Thread adalah suatu bagian program (berupa runtunan kode) yang tidak bergantung pada bagian lain dan dapat dijalankan secara bersama-sama. Ini artinya, suatu thread dapat diistirahatkan (paused) tanpa harus menghentikan bagian lain atau keseluruhan program. Pada saat runtime, semua thread yang 16
  • 17. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 ada di dalam program akan menempati ruang memori yang sama sehingga thread-thread tersebut dapat berbagi data dan kode satu sama lain (Rahardjo, Budi, et al.2009). 3.1 Membuat Thread Saya berikan contoh kode berikut. Kode diatas mencoba menjelaskan bahwa setiap program thread di java memiliki sebuah thread utama (main thread), dan thread ini merupakan induk dari thread-thread lain yang mungkin ada (nanti dibuat) dalam program bersangkutan. Adapun thread-thread lain yang ada biasanya disebut child- thread (thread anak). Pada contoh program, kita mendeklarasikan referensi dari kelas Thread dengan nama tUtama. Sementara method currentThread() digunakan untuk menampung objek Thread yang aktif sekaligus menampilkan informasi default thread. Namun kita bisa merubah informasi thread tersebut dengan method setName(“Nama_Thread”). Pada baris terakhir, kita mencoba melakukan perulangan untuk menampilkan teks tertentu dengan delay 1 detik. Java mendefinisikan dua cara untuk membuat sebuah thread, yaitu dengan mengimplementasikan interface Runnable atau dengan membuat kelas baru yang merupakan turunan dari kelas Thread. Saya coba buatkan kode programnya. 17
  • 18. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 Pada contoh diatas, mula-mula kita membuat objek dari kelas MyRunnable, yaitu kelas yang mengimplementasikan interface Runnable. Selanjutnya di kelas utama, dibuatkan objek Thread baru dengan cara melewatkannya kedalam constructor kelas Thread yang diberi argumen obj. Didalam method run() kita mengisikan kode untuk proses yang akan dijalankan oleh thread yang bersangkutan. Disini kita akan memperoleh hasil bahwa Thread anak dieksekusi, baru kemudian Thread Utama di eksekusi. Namun sebagai catatan, kebanyakan programmer java mengimplementasikan interface Runnable ini dibandingkan dengan menurunkan kelas Thread. Karena alasan tersebut dan saya juga mengimplmentasikan interface Runnable ini untuk optimisasi proses di lingkungan UNIX/ Linux (Inti dari jurnal ini), maka pembahasannya saya batasi. Sebagai informasi, dari sisi desain dan penggunaannya sendiri (apabila tidak memerlukan override di kode yang kita buat), maka interface Runnable ini sama sekali tidak ada masalah jika kita gunakan ;) . 3.2 Menghentikan Thread Thread yang dijalankan (didalam kode yang terdapat method run()) akan secara otomatis berhenti ketika telah selesai dieksekusi. Namun kita diizinkan untuk menghentikan thread secara manual dengan menggunakan method stop(). Berikut kode yang sedikit bisa menjelaskan. 18
  • 19. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 Nah, saya coba tulis program diatas tidak dengan interface Runnable, namun dengan menurunkan kelas Thread. Pada kelas utama, mula-mula kita coba menampilkan informasi bahwa Thread utama telah dijalankan. Kemudian, setelah menginstansiasi dan mereferensikan objek MyThread ke variabel dengan nama 't', kita coba jalankan thread anak tersebut (yang membawa seluruh operasi yang telah di definisikan dan di set pada kelas Thread turunan) dengan menggunakan delay selama 1/40 detik. Selanjutnya, pada kelas utama kita informasikan bahwa thread utama telah selesai dan pada kelas turunan, thread anak selesai. Jika anda menjalankan kode ini, maka ada satu hal yang biasanya tidak kita harapkan bahwa thread utama/ induk selesai terlebih dahulu daripada child-thread. Kita bisa tangani hal ini kemudian. 19
  • 20. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 Bagaimana jika kita menginginkan jumlah thread yang lebih dari dua ??, (pada contoh kode program diatas, jumlah thread maksimal yang kita gunakan ada dua, yakni thread induk dan thread anak). Jawabannya mudah, kita hanya tinggal membuat kelas turunan dari Thread sebanyak jumlah thread yang diinginkan. Contoh berikut bisa anda simak. Mudah sekali bukan, kode diatas akan mengeksekusi proses secara sequence hingga mencapai 20
  • 21. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 posisi bahwa tiap-tiap proses tersebut selesai di eksekusi. 3.3 Method isAlive() dan join() Seperti telah saya singgung sebelumnya bahwa kebanyakan kita pasti berharap bahwa thread induk atau utama adalah thread terakhir yang seharusnya selesai dieksekusi setelah thread anak atau turunannya selesai dieksekusi. Untuk melakukan hal tersebut, kita perlu memanggil method join() pada semua thread anak. Kemudian apabila kita ingin mengetahui apakah suatu thread masih dalam keadaan aktif atau tidak, kita dapat memanggil method isAlive(). 21
  • 22. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 Catatan : karena method join() ini akan benar-benar menunggu sampai objek thread pemanggil (ke kelas turunan yang bersangkutan) benar-benar selesai dieksekusi, maka deklarasi throws InterruptedException adalah sebuah kewajiban guna menjebak eksepsi. 3.4 Method untuk Sinkronisasi (Monitorl Lock, Semaphore) Inilah salah satu dari banyak kelebihan luar biasa lainnya dari java. Seperti kita ketahui bahwa thread-thread dalam sebuah kode program saling membagi ruang memori yang sama (berbeda dengan sebuah proses, dimana alokasi memorinya dikonsumsi secara sendiri-sendiri), Pada saat thread yang sama mengakses sebuah resource yang di share, maka perlu dilakukan sebuah cara untuk meyakinkan bagaimana resource tersebut hanya digunakan oleh sebuah thread. Dalam arti, tidak ada thread yang saling berebut resource hingga thread yang bersangkutan selesai atau melepas resource yang telah di share. Kita lakukan hal ini guna mengimplementasikan konsep mutual exclusion (mutex) di Sistem Operasi serta agar tidak terjadi deadlock. Sebegitu luar biasanya java bukan!?. Dengan menggunakan kata kunci synchronized di kelas yang ingin kita gunakan, kembali saya berikan contoh kode program 22
  • 23. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 untuk mendeskripsikan hal ini. Hasil yang dicetak ke layar monitor adalah … [Contoh] 23
  • 24. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 [Method] [Sinkronisasi] … Bagaimana jika kita melepas kata kunci synchronized di method yang kita gunakan (pada method test(String s)) ??. maka 'kekacauan' akan terjadi … [Sinkronisasi[Contoh[Method] ] ] ... 4. CARA YANG DITEMPUH Tahap yang saya lakukan untuk mengimplementasikan teori diatas adalah : 1) Mengambil sebuah file berisi catatan-catatan transaksi atau logging dari sistem UNIX/ Linux yang telah di kompresi dengan format .zip 2) Melakukan proses grep atau mengambil data (yang dibutuhkan dari sisi bisnis), Sebagai catatan, grep disini bukanlah program yang ada di lingkungan UNIX/ Linux, tetapi merupakan sebuah aktifitas pengambilan data secara manual (membaca, mencari, dan menampilkan dengan memanfaatkan pustaka java Input/Output). Karena jika saya gunakan langsung 'grep' yang sudah ada di lingkungan UNIX/ Linux, maka konsep nya akan salah karena berarti dalam hal ini saya menjalankan beberapa proses (process-based multitasking, bukan thread-based) dengan bantuan program 'grep'. 3) Menampilkan informasi aktif dan informasi selesai dari setiap kegiatan grep ini serta penggunaan method synchronized guna meyakinkan bahwa konsep sinkronisasi telah berjalan. 24
  • 25. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 5. PERUMUSAN DAN HASIL 25
  • 26. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 26
  • 27. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 Hasil yang dicetak ke layar monitor dari kode program diatas adalah ... Thread Utama dijalankan t1.getThread().isAlive() : true t2.getThread().isAlive() : true t3.getThread().isAlive() : true These what u're looking for : GET /mo/index These what u're looking for : status=16 These what u're looking for : status=16 These what u're looking for : GET /mo/index These what u're looking for : harymu_ammar These what u're looking for : GET /mo/index These what u're looking for : status=16 These what u're looking for : GET /mo/index Thread Grep Kedua selesai.. These what u're looking for : GET /mo/index Thread Grep Pertama selesai.. 27
  • 28. Jurnal Implementasi Teknologi Thread di Java Vol.1, No. 1, 6 Juli 2014: 1-28 These what u're looking for : GET /mo/index These what u're looking for : GET /mo/index Thread Grep Ketiga selesai.. t1.getThread().isAlive() : false t2.getThread().isAlive() : false t3.getThread().isAlive() : false Thread Utama selesai … 6. KESIMPULAN DAN SARAN Kode program ini diharapkan menjadi solusi bagi para system administrator (khususnya di lingkungan selain Windows) dalam memanajemen server dengan resources yang sangat terbatas. Ada sebuah titik dimana pemrograman seperti shell script, perl, dan lainnya memiliki keterbatasan untuk lebih 'dive' tentang cara bagaimana sistem operasi bekerja. Kode program dapat ditambah atau disesuaikan dengan kebutuhan para system administrator seperti bagaimana jika kode mampu membaca file transaksi dengan tanggal yang dinamis, dan sebagainya. Saya sadari bahwa kode program tersebut masih memiliki kelemahan seperti belum mampu membaca tipe file kompresi langsung dari aplikasi linux console seperti bzip2 -v9, zip, dsb. Sebagai catatan, zip file didalam direktori /root/ tersebut adalah hasil kompresi dari tipe winzip. Untuk itulah diharapkan kritik dan saran yang membangun untuk kode program diatas ke alamat email saya yang telah dicantumkan sebelumnya. Semua kode sumber atau source code dapat di download di situs saya di tifosilinux.wordpress.com. Terima Kasih. DAFTAR PUSTAKA Rahardjo, Budi, et al.2009.”Mudah Belajar JAVA”, Informatika, Bandung. Corsika (2011). Should you synchronized the run method? Why or Why Not? (Forum stackoverflow). From http://stackoverflow.com/questions/7313657/should-you-synchronize- the-run-method-why-or-why-not, 6 July 2014 Jurnal ini ditulis dengan : PCLinuxOS release 2011 arch i586, Apache OpenOffice 4.01, Dia 0.97.2, java version 1.7.0_45 28