|
Contact Me
credits
|
ARTIKEL
THREAD
Oleh :
Khairunnisa Nurrahmatia Salsabila
19523191 (A –
Teknik Informatika)
Universitas Islam Indonesia
APA ITU
THREAD?
Thread
adalah rangkaian eksekusi dari sebuah aplikasi java dan setiap program java
minimal memiliki satu buah thread. Sebuah thread merupakan sebuah pengontrol
aliran program. Untuk lebih mudahnya, bayangkanlah thread sebagai sebuah proses
yang akan dieksekusi didalam sebuah program tertentu.
Penggunaan
sistem operasi modern saat ini telah mendukung kemampuan untuk menjalankan
beberapa program. Misalnya, pada saat Anda mengetik sebuah dokumen di komputer
Anda dengan menggunakan text editor, dalam waktu yang bersamaan Anda juga dapat
mendengarkan musik, dan surfing lewat internet di PC Anda. Sistem operasi yang
telah terinstal dalam computer Anda itulah yang memperbolehkan Anda untuk
menjalankan multitaskting. Seperti itu juga sebuah program (ibaratkan di PC
Anda), ia juga dapat mengeksekusi beberapa proses secara bersama-sama(ibaratkan
beberapa aplikasi berbeda yang bekerja pada PC Anda).
Sebuah contoh aplikasi adalah
HotJava browser yang memperbolehkan Anda untuk browsing terhadap suatu page,
bersamaan dengan mendownload object yang lain, misalnya gambar, memainkan
animasi, dan juga file audio pada saat yang bersamaan.
Penjelasan
New : Sebuah thread baru dimulai
siklus hidupnya pada keadaan baru. Masih dalam kondisi ini sampai program
menjalankan thread. Hal ini juga disebut sebagai thread lahir. Saat thread
berada di status new, belum ada sumber daya yang dialokasikan, sehingga thread
belum bisa menjalankan perintah apapun.
Runnable : Setelah thread baru
lahir dijalankan, thread menjadi runnable. Sebuah thread dalam kondisi ini ini
dianggap telah mengeksekusi task-nya. Agar thread bisa menjalankan tugasnya,
method start() dari kelas Thread harus dipanggil. Ada dua hal yang terjadi saat
pemanggilan method start(), yaitu alokasi memori untuk thread yang dibuat dan
pemanggilan method run(). Saat method run() dipanggil, status thread berubah
menjadi runnable, artinya thread tersebut sudah memenuhi syarat untuk
dijalankan oleh JVM. Thread yang sedang berjalan juga berada di status
runnable.
Waiting : Kadang-kadang transisi
thread ke keadaan menunggu(waiting state) selama thread menunggu thread lain
untuk menjalankan task. Sebuah transisi thread kembali ke keadaan runnable
hanya ketika sinyal thread lain menunggu untuk melanjutkan eksekusi.
Timed waiting : Sebuah runnable
thread dapat memasuki keadaan timed waiting untuk interval tertentu. Sebuah
thread dalam keadaan transisi ini
kembali ke keadaan runnable ketika interval
waktu berakhir atau ketika event menunggu untuk terjadi.
Terminated : Sebuah thread
runnable memasuki keadaan dihentikan(terminated) ketika menyelesaikan task-nya
atau berakhir(terminate).
State dari Thread (status)
Sebuah thread memungkinkan untuk
memiliki beberapa state:
1. Running
Sebuah thread yang pada saat ini
sedang dieksekusi dan didalam control dari CPU.
2. Ready to run
Thread yang sudah siap untuk
dieksekusi, tetapi masih belum ada kesempatan untuk melakukannya.
3. Resumed
Setelah sebelumnya di block atau
diberhentikan sementara, state ini kemudian siap untuk dijalankan.
4. Suspended
Sebuah thread yang berhenti
sementara, dan kemudian memperbolehkan CPU untuk menjalankan thread lain
bekerja.
5. Blocked
Sebuah thread yang di-block
merupakan sebuah thread yang tidak mampu berjalan, karena ia akan menunggu
sebuah resource tersedia atau sebuah event terjadi.
PRIORITAS THREAD
Setiap thread Java mempunyai
prioritas yang membantu sistem operasi menentukan urutan thread dijadwalkan.
Prioritas Java berada dalam
kisaran antara MIN_PRIORITY (konstanta 1) dan MAX_PRIORITY (konstanta 10).
Secara default, setiap thread diberikan prioritas NORM_PRIORITY (konstanta 5).
Thread dengan prioritas lebih
tinggi lebih penting untuk program dan harus dialokasikan sebelum thread dengan
lower-priority(prioritas lebih rendah).
Contohnya, sering kali ketika
kita mengeksekusi program dengan urutan dari kiri ke kanan, atas ke bawah. Kalo
Multi-Threading adalah proses dengan thread yang banyak dan mengerjakan lebih
dari satu tugas dalam satu waktu.
Baris perintah nomer 8 akan
dieksekusi setelah nomer 7 selesai, dan tentunya itu setelah nomer 6 selesai.
Dan jangan harap nomer 5 akan dieksekusi apabila nomer 1 belum selesai.
MULTITHREADING
Dukungan thread disediakan pada
tingkat user yaitu user threads dan kernel threads. User Threads disediakan
oleh kernel dan diatur tanpa dukungan kernel, sedangkan kernel therads didukung
dan diatur secara langsung oleh sistem operasi.
Hubungan antara user threads dan
kernel threads terdiri dari tiga model relasi, yaitu:
Model
One to One:
Model One-to-One memetakan setiap
thread tingkatan pengguna ke thread kernel. Ia menyediakan lebih banyak
concurrency dibandingkan model Many-to-One..
Karena pembuatan thread dapat
menurunkan kinerja dari sebuah aplikasi maka implmentasi dari model ini jumlah
thread dibatasi oleh sistem. Contoh sistem operasi yang mendukung model
One-to-One ialah Windows NT dan OS/2.
Model
Many-to-One memetakan
beberapa thread tingkatan pengguna ke sebuah thread tingkatan kernel. Pengaturan
thread dilakukan dalam ruang pengguna, sehingga efisien. Hanya satu thread
pengguna yang dapat mengakses thread kernel pada satu saat.
Jadi, multiple thread tidak dapat
berjalan secara paralel pada multiprocessor. Thread tingkat pengguna yang
diimplementasi pada sistem operasi yang tidak mendukung thread kernel
menggunakan model Many-to-One
Model ini me-multipleks banyak
thread tingkatan pengguna ke thread kernel yang jumlahnya lebih sedikit atau
sama dengan tingkatan pengguna thread. Jumlah thread kernel spesifik untuk
sebagian aplikasi atau sebagian mesin.
Many-to-One model mengizinkan
developer untuk membuat user thread sebanyak yang ia mau tetapi concurrency
(berjalan bersama) tidak dapat diperoleh karena hanya satu thread yang dapat
dijadwal oleh kernel pada suatu waktu.
One-to-One menghasilkan concurrency
yang lebih tetapi developer harus hati-hati untuk tidak menciptakan terlalu
banyak thread dalam suatu aplikasi (dalam beberapa hal, developer hanya dapat
membuat thread dalam jumlah yang terbatas).
Model
Many-to-Many tidak
mengalami kelemahan dari dua model di atas. Developer dapat membuat user thread
sebanyak yang diperlukan, dan kernel thread yang bersangkutan dapat bejalan
secara ysteml pada multiprocessor.
Dan juga ketika suatu thread
menjalankan blocking system call maka kernel dapat menjadwalkan thread lain
untuk melakukan eksekusi. Contoh ystem operasi yang mendukung model ini adalah
Solaris, IRIX, dan Digital UNIX.
Keuntungan
Thread
1.
Responsif :
Aplikasi yg multithreading dapat
meningkatkan respons terhadap user Sebagai contohnya dalam web browser yang
multithreading, sebuah thread dapat melayani permintaan user untuk menampilkan
video, sementara thread lain berusaha menampilkan image.
2.
Berbagi
Sumber Daya :
Thread berbagi memori dan sumber
daya dengan thread lain yang dimiliki oleh proses yang sama. Keuntungan dari
berbagi kode adalah mengizinkan sebuah aplikasi untuk mempunyai beberapa thread
yang berbeda dalam lokasi memori yang sama.
3.
Ekonomis :
Dalam pembuatan sebuah proses
banyak dibutuhkan pengalokasian memori dan sumber daya. Alternatifnya adalah
dengan penggunaan thread, karena thread berbagi memori dan sumber daya proses
yang memilikinya maka akan lebih ekonomis
4.
Utilisasi
arsitektur multiprocessor:
Keuntungan dari multithreading
dapat sangat meningkat pada arsitektur multiprocessor, dimana setiap thread
dapat berjalan secara pararel di atas processor yang berbeda.
Membuat
Thread dengan Mengimplementasikan Runnable:
Cara termudah untuk membuat
sebuah thread adalah untuk membuat sebuah kelas yang mengimplementasikan
interface Runnable.
Untuk mengimplementasikan
Runnable, kelas hanya perlu menerapkan metode tunggal yang disebut run(), yang
dinyatakan seperti ini:
public void run( )
Anda akan menentukan kode yang
merupakan thread baru dalam method run(). Adalah penting untuk memahami bahwa
run () dapat memanggil method lain, menggunakan kelas-kelas lain, dan
menyatakan variabel, seperti thread utama.
Setelah anda membuat sebauh kelas
yang mengimplementasikan Runnable, anda akan instantiate sebuah objek dari tipe
Thread dari dalam kelas tersebut. Thread mendefinisikan beberapa construktor.
Salah satu yang akan kita gunakan adalah ditampilkan di sini:
Thread(Runnable
threadOb, String threadName);
Di sini threadOb adalah sebuah
instance dari sebuah kelas yang mengimplementasikan interface Runnable dan nama
thread baru ditentukan oleh threadName.
Setelah thread baru dibuat, tidak
akan mulai berjalan sampai anda memanggil method start(), yang dideklarasikan
dalam Thread. Method start() ditampilkan di sini:
void start( );
Contoh :
public class RunnableThread implements
Runnable {
Thread thread;
RunnableThread(String name) {
thread = new Thread(this, name);
thread.start();
}
public void run() {
String name = thread.getName();
for (int i = 0; i < 100; i++) {
System.out.println(name);
}
}
public static void main(String[] args) {
new RunnableThread(“A”);
new RunnableThread(“B”);
new RunnableThread(“C”);
new RunnableThread(“D”);
}
}
Membuat Thread dengan Menurunkan (extend) class Thread
Cara kedua untuk membuat sebuah thread adalah untuk menciptakan
sebuah kelas baru yang menurunkan(extend) Thread, dan kemudian untuk membuat
sebuah instance dari kelas itu.
Kelas extend harus override metode run(), yang merupakan entry
point untuk thread baru. Hal ini juga harus memanggil start() untuk memulai
eksekusi dari thread baru.
Contoh:
package thread;
public class cetakNamaThread extends Thread {
cetakNamaThread(String name) {
super(name);
//menjalankan thread dengan satu kali instantiate
start();
}
public void run() {
String name = getName();
for (int i = 0; i < 100; i++) {
System.out.print(name);
}
}
public static void main(String[] args) {
cetakNamaThread ctt1 = new cetakNamaThread(“A”);
cetakNamaThread ctt2 = new cetakNamaThread(“B”);
cetakNamaThread ctt3 = new cetakNamaThread(“C”);
cetakNamaThread ctt4 = new cetakNamaThread(“D”);
}
}
Baiklah, sekian pemaparan sekilas tentang thread. Moon maaf apabila
ada salah kata dalam penyampaian. Terima kasih.
Referensi
:
http://dahlan.unimal.ac.id/files/java2/JENI-Intro2-Bab09-THREADS.pdf,
https://berbagiubuntu.wordpress.com/2012/10/02/java-thread/,
https://dikfatahillah.student.telkomuniversity.ac.id/konsep-thread-sistem-operasi/,
https://medium.com/@DalihRusmana/cara-membuat-multithread-di-java-7ac1a5a406fd,
https://7seasons.wordpress.com/tag/runnable-class/?source=post_page-----7ac1a5a406fd----------------------,
https://vivimargaretha494.wordpress.com/2015/10/01/thread-pada-sistem-operasi-2/,
http://ftp.gunadarma.ac.id/linux/docs/v06/Kuliah/SistemOperasi/BUKU/SistemOperasi-4.X-1/ch11s03.html
|
0 Komentar:
Posting Komentar