Konsep Multihtreading, Prioritas Thread, Metode Sinkronisasi, Statement Sinkronisasi, dan Komunikasi Thread Dengan Statement Pada Pemrograman Java
Pembahasan kali ini Saya
Dari Kelompok 8 akan me riview tentang Konsep Multithreading, Prioritas
Thread,Metode Sinkronisasi, Statement Sinkronisasi, dan Komunikasi Thread
Dengan Statement Pada Perkuliahan Algoritma Pemrograman Java . Sebelum ke konsep multihtreading saya akan
menjelaskan sedikit apa itu multihtreading ,Keuntungan multihtreading, Model
multihtreading Pada Pemrograman Java.
Thread
adalah satu kumpulan instruksi yg akan dieksekusi secara independen
Kegunaan
thread pada permainan( game) dan web browser
Multithreading
Arti istilah Multithreading dianggap berkaitan erat
dengan pengertian multi thread merupakan jalannya beberapa proses dengan urutan
yang cepat (multitasking) dalam satu program. Multithreading ini merupakaan
teknik pada manipulasi data dimana node-node pada struktur pohon data berisi
penunjuk ke node yang lebih tinggi untuk membuat lintasan struktur menjadi
lebih efisien.Kalau sebelumnya kita telah mempelajari tentang proses, namun
seiring berjalannya waktu dan tuntutan teknologi ternyata ditemukan kelemahan
yang sebenarnya bisa diminimalisir pada proses. Untuk itulah diciptakan thread
yang merupakan cara dari komputer untuk menjalankan dua atau lebih task dalam
waktu bersamaan, sedangkan multithreading adalah cara komputer untuk
membagi-bagi pekerjaan yang dikerjakan sebagian-sebagian dengan cepat sehingga
menimbulkan efek seperti menjalakan beberapa task secara bersamaan walaupun
otaknya hanya satu.
Keuntungan
dari sistem yang menerapkan multithreading dapat kita kategorikan menjadi 4
bagian:
1.
Responsif. Aplikasi interaktif menjadi tetap responsif
meskipun sebagian dari program sedang diblok atau melakukan operasi lain yang
panjang. Umpamanya, sebuah thread dari web browser dapat melayani permintaan
pengguna sementara thread yang lain berusaha menampilkan gambar.
2.
Berbagi sumber daya. Beberapa thread yang melakukan proses
yang sama akan berbagi sumber daya. Keuntungannya adalah mengizinkan sebuah
aplikasi untuk mempunyai beberapa thread yang berbeda dalam lokasi memori yang
sama.
3.
Ekonomis. Pembuatan sebuah proses memerlukan pengalokasian
memori dan sumber daya. Alternatifnya adalah dengan menggunakan thread, karena
thread membagi memori dan sumber daya yang dimilikinya sehingga lebih ekonomis
untuk membuat thread dan context switching thread. Akan susah mengukur
perbedaan waktu antara thread dan switch, tetapi secara umum pembuatan dan
pengaturan proses akan memakan waktu lebih lama dibandingkan dengan thread.
Pada Solaris, pembuatan proses memakan waktu 30 kali lebih lama dibandingkan
pembuatan thread sedangkan proses context switch 5 kali lebih lama dibandingkan
context switching thread.
4.
Utilisasi arsitektur multiprosesor. Keuntungan dari
multithreading dapat sangat meningkat pada arsitektur multiprosesor, dimana
setiap thread dapat berjalan secara paralel di atas procesor yang berbeda. Pada
arsitektur processor tunggal, CPU menjalankan setiap thread secara bergantian
tetapi hal ini berlangsung sangat cepat sehingga menciptakan ilusi paralel,
tetapi pada kenyataanya hanya satu thread yang dijalankan CPU pada satu-satuan
waktu.
Model-Model
MultiThreading:
1.
Model Many-to-One. Model ini 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 multiprosesor. Contoh: Solaris Green Threads
dan GNU Portable Threads.
2.
Model One-to-One. Model ini memetakan setiap thread
tingkatan pengguna ke setiap thread. Ia menyediakan lebih banyak concurrency
dibandingkan model Many-to-One. Keuntungannya sama dengan keuntungan thread
kernel. Kelemahan model ini ialah setiap pembuatan thread pengguna memerlukan
tambahan thread kernel. Karena itu, jika mengimplementasikan sistem ini maka
akan menurunkan kinerja dari sebuah aplikasi sehingga biasanya jumlah thread
dibatasi dalam sistem. Contoh: Windows NT/XP/2000 , Linux, Solaris 9.
3.
Model Many-to-Many. Model ini memultipleks banyak thread
tingkatan pengguna ke thread kernel yang jumlahnya sedikit atau sama dengan
tingkatan pengguna. Model ini mengizinkan developer membuat thread sebanyak
yang ia mau tetapi concurrency tidak dapat diperoleh karena hanya satu thread
yang dapat dijadwalkan oleh kernel pada suatu waktu. Keuntungan dari sistem ini
ialah kernel thread yang bersangkutan dapat berjalan secara paralel pada
multiprosessor
.
KONSEP
MULTITHREADING
Konsep multithreading
adalah memberikan dan memperbolehkan banyak thread dieksekusi pada program yang
sama pada waktu yang bersamaan, seperti yang ditunjukkan pada Gambar 1. Ini
tidak sama dengan multitasking, karena thread-thread mengeksekusi pada
dataspace yang sama. Jika suatu variabel global diubah pada suatu thread maka
semua thread akan memperhatikan perubahan tersebut. Thread pada java diciptakan
dan dikelola melalui kelas Thread yang terdapat di package standar java.lang.
Pada java, menciptakan suatu objek kelas Thread akan menciptakan suatu thread
.Kelas Thread di java menyediakan sejumlah metode untuk mengendalikan thread
misalnya untuk memasuki antrian (start), istirahat (sleep), dan lain-lain.
Metode dari kelas Thread yang harus didefinisikan kembali oleh sub kelas adalah
metode run. Metode run akan dipanggil secara otomatis saat suatu thread
memegang kendali pemroses. Selain kelas Thread, java juga menyediakan interface
Runnable yang dapat
diimplementasikan oleh kelas yang mengimplentasikan metode run.
Gambar
1 Aplikasi multithreading
Setiap thread memiliki
prioritas yang menentukan penjadwalan thread. Bila thread diciptakan tanpa
mendefinisikan prioritas secara eksplisit maka akan digunakan prioritas
default, yaitu mempunyai nilai prioritas lima. Bila terdapat suatu thread yang
memiliki prioritas yang lebih tinggi dari thread yang lain maka thread tersebut
akan segera dijalankan sedangkan thread yang sebelumnya sedang berjalam akan
segera menuju antrian (preemptive). Dengan mendefinisikan atribut modifier
sebagai volatile akan dijamin bahwa setiap akses ke atribut tersebut yang akan
dilakukan oleh suatu thread dijamin akan mengakses nilai current pada memori utama.
PRIORITAS
THREAD
Dalam Java kita dapat
membuat prioritas suatu thread relative terhadapat thread yang lain. Sehingga
thread yang mempunyai prioritas lebih tinggi mempunyai kesempatan lebih besar
untuk mengakses suatu sources Java Virtual Machine memilih thread yang runnable
dengan prioritas tertinggi. Semua thread java mempunyai prioritas dari 1 sampai
10. Prioritas tertinggi 10 dan berakhir dengan 1 sebagai prioritas terendah.
Sedangkan prioritas normal adalah 5.
Thread.MIN_PRIORITY = thread dengan prioritas terendah.
Thread.MAX_PRIORITY = thread dengan prioritas tertinggi.
Thread.NORM_PRIORITY = thread dengan prioritas normal.
Saat thread baru dibuat ia mempunyai prioritas yang sama
dengan thread yang menciptakannya. Prioritas thread dapat diubah dengan
menggunakan setpriority() method.
Contoh program dari
Prioritas Thread
SINKRONISASI
sinkronisasi adalah suatu proses pengendalian akses dari sumber daya
terbagi pakai (shared resource) oleh banyak thread sedemikian sehingga hanya
satu thread yang dapat mengakses sumber daya tertentu pada satu waktu.
Terdapat 2 (dua) bagian kode yang dapat
dikenakan sinkronisasi di dalam Java:
•
synchronized method
•
synchronized block
public class Counter {
long count = 0;
public void add(long value){
synchronized (this) {
this.count += value;
System.out.println(count);
}
}
}
KOMUNIKASI THREAD DENGAN STATEMENT
A.
Method wait() menyebabkan thread terakhir yang mengakses
obyek melepaskan kunci obyek dan menunggu sampai thread lain yang
mengambil kunci obyek tersebut melepaskannya kembali ke obyek.
Terdapat 2 jenis method wait(), yaitu :
1. wait()menunggu
sampai waktu tak berhingga sampai ada thread yang menyerahkan kunci
obyek kepada obyek bersangkutan.
2. wait ( long
timeout ) menunggu sampai timeout milidetik.
B.
suspend()
Method suspend() berbeda dengan stop(). Method ini mengambil thread tertentu
dan menyebabkannya berhenti tanpa menghancurkan thread di bawahnya atau
keadaan thread yang berjalan sebelumnya. Jika suatu thread di-suspend,
panggil method resume() pada thread yang sama untuk
menjalankannya lagi.
C.
resume()
Method ini digunakan untuk menghidupkan method yang di-suspend. Tidak
ada jaminan bahwa thread yang dijalankan kembali akan berjalan dengan
baik karena mungkin sudah ada thread dengan prioritas lebih tinggi yang
berjalan. Tetapi, resume() memungkinkan thread untuk berjalan kembali.
D.
stop()
Method ini menyebabkan thread segera berhenti. Ini sering dijadikan cara
tercepat untuk mengakhiri suatu thread khususnya jika method ini
dieksekusi pada thread yang berlaku. Pada kasus ini, baris program
setelah pemanggilan method stop() tidak pernah dieksekusi karena konteks
jalinan musnah sebelum stop() selesai.
1 komentar:
nice info
Solder uap
Posting Komentar