BAB VIII
THREAD DAN
MULTITHREADING
A.
Tujuan
1. Memahami Thread pada
Java
2. Memahami penggunaan
Thread.
B.
Thread
1.
Thread adalah sekumpulan instruksi (proses) yang dieksekusi secara independent
2.
Multithreading adalah suatu kemampuan yang memungkinkan beberapa kumpulan instruksi
(proses) dijalankan secara bersamaan (time slicing) dalam sebuah program.
3.
Multithreading bermanfaat untuk membuat proses yang interaktif, misalanya pada
program permainan (game). Program tetap dapat menggerakan beberapa objek sambil
memberi kesempatan pengguna melakukan respon melalui mouse atau keyboard.
File name :
ThreadBeraksi1.java
|
class Mobil
implements Runnable{
String nama;
public
Mobil(String id){
nama = id;
}
public void
run(){
for(int i=0;
i<5 ; i++){
try{
Thread.currentThread().sleep(1000);
}catch(InterruptedException
ie){
System.out.println("Terinturipsi");
}
System.out.println("Thread
:"+nama+":posisi"+i);
}
}
}
public class
ThreadBeraksi1 {
public static
void main (String[] args) {
Thread m1 = new
Thread(new Mobil("M-1"));
Thread m2 = new
Thread(new Mobil("M-2"));
m1.start();
m2.start();
}
}
|
File name : ThreadBeraksi2.java
|
class Mobil
extends Thread{
public
Mobil(String id){
super(id);
}
public void
run(){
String nama =
getName();
for(int i=0;
i<5; i++){
try{
sleep(1000);
}catch(InterruptedException
ie){
System.out.println("Terinterupsi");
}
System.out.println("Thread
"+nama+" : Posisi "+i);
}
}
}
public class
ThreadBeraksi2 {
public static
void main (String[] args) {
Mobil m1 = new
Mobil("M-1");
Mobil m2 = new
Mobil("M-2");
m1.start();
m2.start();
}
}
|
File name : ThreadBeraksi3.java
|
class Mobil
extends Thread{
public
Mobil(String id){
super(id);
}
public void
run(){
String nama =
getName();
for(int i=0;
i<5; i++){
try{
sleep(1000);
}catch(InterruptedException
ie){
System.out.println("Terinterupsi");
}
System.out.println("Thread
"+nama+" : Posisi "+i);
}
}
}
public class
ThreadBeraksi3 {
public static
void main (String[] args) {
Mobil m1 = new
Mobil("M-1");
Mobil m2 = new
Mobil("M-2");
m1.start();
m2.start();
boolean
m1Berakhir = false;
boolean
m2Berakhir = false;
do{
if(!m1Berakhir
&& !m1.isAlive()){
m1Berakhir =
true;
System.out.println("Thread
m1 berakhir");
}
if(!m2Berakhir
&& !m2.isAlive()){
m2Berakhir =
true;
System.out.println("Thread
m2 berakhir");
}
}while
(!m1Berakhir || m2Berakhir);
}
}
|
Sinkronisasi
- Pada beberapa kondisi,
proses secara bersamaan terkadang tidak memungkinkan
- Contohnya adalah proses
I/O stream khususnya pada proses membaca dan menulis suatu
data atau file
- Proses thread pembacaan
atau penulisan data menjadi tidak benar karena seharusnya data
dan file tersebut
berubah-ubah (sedang dibuka dan ditulis oleh thread lain)
- Untuk kondisi diatas
perlu dilakukan sinkronisasi dengan menggunakan keyword
synchronized.
Cara Penggunaan
Synchronized:
- Sinkronisasi pada
method : mendeklarasikan suatu method dengan menggunakan keyword
synchronized.
- Sinkronisasi pada objek
: menambahkan blok di bawah pada pemmanggilan objek
Synchronized (objek){
. . . .
}
File name : ThreadBeraksi4.java
|
class Mobil extends Thread{
public Mobil(String id){
super(id);
}
public void run(){
String nama = getName();
SinkronisasiKeluaran.info(nama);
}
}
class SinkronisasiKeluaran{
public static synchronized void
info(String nama){
for (int i=0; i<5; i++){
try{
Thread.sleep(1000);
}catch (InterruptedException ie){
System.out.println("Terinterupsi");
}
System.out.println("Thread
"+nama+" : posisi"+i); }
}
}
public class ThreadBeraksi4 {
public static void main (String[] args)
{
Mobil m1 = new Mobil("M-1");
Mobil m2 = new Mobil("M-2");
m1.start();
m2.start();
}
}
|
File name : ThreadBeraksi5.java
|
class Mobil extends Thread{
public Mobil(String id){
super(id);
}
public void run(){
synchronized (this){
String nama = getName();
SinkronisasiKeluaran.info(nama);
}
}
}
class SinkronisasiKeluaran{
public static synchronized void
info(String nama){
for (int i=0; i<5; i++){
try{
Thread.sleep(1000);
}catch (InterruptedException ie){
System.out.println("Terinterupsi");
}
System.out.println("Thread
"+nama+" : posisi"+i); }
}
}
public class ThreadBeraksi5 {
public static void main (String[]
args) {
Mobil m1 = new
Mobil("M-1");
Mobil m2 = new
Mobil("M-2");
m1.start();
m2.start();
}
}
|
Prioritas Thread
- Method setPriority(int level) dapat dipanggil untuk menentukan
prioritas thread
- Nilai level bisa berupa bilangan bulat dari 1-10
- Prioritas normal memilki nilai level 5
- Tidak semua system operasi mendukung operasi
ini, sehingga kadang pemanggilan method ini tidak memberikan efek apa-apa.
Tidak ada komentar:
Posting Komentar