Anda di halaman 1dari 25

Pemrograman Berorientasi Objek

Multithreading

Oleh :
SRI HERAWATI, S.KOM

D3 MANAJEMEN INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS TRUNOJOYO
MULTITHREADING
• Multithreading adalah kemampuan yg
memungkinkan kumpulan instruksi atau
proses dpt dijalankan secara
bersamaan dlm sebuah program.
• Thread adalah satu kumpulan instruksi
yg akan dieksekusi secara independen
• Kegunaan thread pada permainan(
game) dan web browser
Multithreading

Sebuah program

Thread 1

Thread 2

Thread 3

Daur hidup sebuah thread


waktu
Penanganan Thread
• Thread dengan menggunakan kelas
thread
• Thread melalui Runnable
Menggunakan kelas Thread
• Cara ini dgn memperluas kelas thread
dan menuliskan kembali kode pada
metode run().
• Bentuk :
class namakelas extends Thread{
public void run(){

}
}
Contoh : Ujithread.java
public class Ujithread{
public static void main(String[] args){
Mobil m1 = new Mobil("M-1");
Mobil m2 = new Mobil("M-2");

m1.start();
m2.start();
}
}
class Mobil extends Thread{
//konstruktor
public Mobil(String id){
super(id);
}
Contoh : Ujithread.java
//mendefinisikan sendiri run()
public void run() {
String nama = getName();
for (int i=0; i<5; i++) {
try{
sleep(1000); //tunggu 1 detik
}
catch(InterruptedException ie){
System.out.println("terinterupsi");
}
System.out.println("Thread " + nama + " :Posisi " + i);
}
}
Keterangan :

Mobil m1 = new Mobil(“M-1”) class Mobil extends Thread{


m1.start();

public void run() {

}
Hasil :
Thread melalui Runnable
• Runnable sesungguhnya adalah
sebuah interface.
• Dengan mengimplementasikan
interface ini, sebuah kelas yg
menangani thread dapat diciptakan.
Contoh : Ujithread2.java
public class Ujithread2 {
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();
}
}
Contoh : Ujithread2.java
class Mobil implements Runnable{
String nama;

//konstruktor
public Mobil(String id) {
nama=id;
}
Contoh : Ujithread2.java
public void run() {
for(int i=0; i<5; i++) {
try{
Thread.currentThread().sleep(1000);
}
catch(InterruptedException ie){
System.out.println("terinterupsi");cr
}
System.out.println("Thread " + nama + " :Posisi "
+ i);
}
}
Hasil :
Daur hidup Thread
• Sebuah Thread terus dieksekusi sampai
salah satu kondisi berikut terjadi :
1.Eksekusi terhadap run() berakhir
2.Terinterupsi oleh eksepsi yg tidak
tertangkap
3.Metode stop() dipanggil
Contoh : Ujithread3.java
public class Ujithread{
public static void main(String[] args){
Mobil m1 = new Mobil("M-1");
Mobil m2 = new Mobil("M-2");

m1.start();
m2.start();
}
}
class Mobil extends Thread{
//konstruktor
public Mobil(String id){
super(id);
}
Contoh : Ujithread3.java
// beri komentar ketika thread berakhir
boolean m1Berakhir = false;
boolean m2Berakhir = false;

do{
//cek keberadaan thread m1
if (!m1Berakhir && !m1.isAlive()) {
m1Berakhir = true;
System.out.println("Thread m1 berakhir");
}
Contoh : Ujithread3.java
// cek keberadaan thread m2
if (!m2Berakhir && !m2.isAlive()) {
m2Berakhir = true;
System.out.println("Thread m2 berakhir");
}
}while (!m1Berakhir || !m2Berakhir);
Contoh : Ujithread3.java
//mendefinisikan sendiri run()
public void run() {
String nama = getName();
for (int i=0; i<5; i++) {
try{
sleep(1000); //tunggu 1 detik
}
catch(InterruptedException ie){
System.out.println("terinterupsi");
}
System.out.println("Thread " + nama + " :Posisi " + i);
}
}
Hasil :
Sinkronisasi
• Sinkronisasi merupakan suatu upaya
agar kode tertentu dijalankan secara
berurutan dengan jaminan kode
tersebut tdk akan dijalankan oleh yg lain
dlm waktu bersamaan.
Contoh : Ujithread4.java
public class Ujithread4{
public static void main(String[] args){
Mobil m1 = new Mobil("M-1");
Mobil m2 = new Mobil("M-2");

m1.start();
m2.start();
}
}
Contoh : Ujithread4.java
class Mobil extends Thread{
//konstruktor
public Mobil(String id){
super(id);
}

//mendefinisikan sendiri run()


public void run() {
String nama = getName();
SinkronisasiKeluaran.info(nama);
}
}
Contoh : Ujithread4.java
class SinkronisasiKeluaran{
public static synchronized void info(String nama){
for (int i=0; i<5; i++) {
try{
Thread.sleep(1000); //tunggu 1 detik
}
catch(InterruptedException ie){
System.out.println("terinterupsi");
}
System.out.println("Thread " + nama + " :Posisi " + i);
}
}
}
Hasil :

Anda mungkin juga menyukai