Senin, 06 Agustus 2018

Contoh Thread


Pengertian
Thread adalah suatu bagian program yang tidak tergantung pada bagian lain dan dapat dijalankan secara bersama-sama.  Hal ini berarti suatu thread dapat diberhentikan atau diistirahatkan tanpa harus menghentikan yang lainnya.  Pada Java setiap thread dikontrol oleh suatu obyek unik turunan Thread, yang didefinisikan di dalam paket  java .lang



Macam-macam Thread
1. Single Thread
Single-Thread adalah sebuah lightweight process (proses sederhana) yang mempunyai thread tunggal yang berfungsi sebagai pengendali/ controller.
2. Multi Thread
Multi-Threading adalah proses dengan isi thread yang banyak dan mengerjakan lebih dari satu tugas dalam satu waktu.
Perbedaan Single Thread & Multi Thread
Dari gambar diatas perbedaan single thread dan multi thread adalah  jika  multi  thread dia mampu menjalankan lebih dari satu thread secara bersamaan dimana setiap thread dapat melakukan prosesnya sendiri yang semula proses besar terbagi menjadi proses-proses kecil. Sedangkan single thread dia hanya menjalankan satu thread dalam suatu proses yang besar. Namun dalam kasus tertentu, semakin banyak multi thread akan memperlambat suatu proses meskipun multi thread lebih cepat dibanding single thread.

Keuntungan Multi Thread
1. Responsive
Multi Threading mengizinkan progam untuk berjalan terus walaupun pada bagian progam tersebut di block atau sedang dalam menjalankan operasi yang lama atau panjang.
2. Pembagian Sumber Daya Alam
Secara default, thread membagi memori dan sumber daya dari proses. Ketika thread berjalan pada data yang sama, thread tersebut bisa berbagi cache memory.
3. Ekonomis
Mengalokasikan memori dan sumber daya untuk membuat proses sangat mahal. Alternatifnya , karena thread membagi sumber daya dari proses, ini  lebih ekonomis untuk membuat thread.
4. Pemberdayaan Arsitektur Multiprosesor
Setiap thread  dapat berjalan secara paralel pada prosesor yang berbeda. Pada arsitektur prosesor tunggal, CPU biasanya berpindah-pindah antara setiap thread dengancepat, sehingga terdapat ilusi paralisme, tetapi pada kenyataannya hanya satu thread yang berjalan di setiap waktu.


Penerapan Thread pada Java
1. Multi Thread
Dari gambar di samping merupakan contoh penerapan multi thread fibonacci dalam bahasa pemrograman Java. Terlihat jelas bahwa dari source code tersebut terdiri dari 4 thread yang akan di proses dalam waktu bersamaan.
2. Single Thread
Dari gambar di samping merupakan contoh penerapan single thread fibonacci dalam bahasa pemrograman Java. Dari source code tersebut hanya ada satu thread yang akan menjalankan satu proses progam fibonacci.

***Contoh Program Single Thread

package uas.pbo;

import java.util.Scanner;

public class Fibonacci {
    public static void main(String[] args){
        int n,a=0,b=1;
        System.out.println("Fibonacci\n");
        Scanner input = new Scanner(System.in);
        System.out.println("Maaukkan jumlah bilangan : ");
        n = input.nextInt();
        System.out.println("Hasil : ");
        for(int i=1; i<=n; i++){
            System.out.print(a + " ");
         
            int sum = a + b;
            a = b;
            b = sum;
        }
    }
}

Hasil :
Fibonacci

Masukkan jumlah bilangan :
3
Hasil :
0 1 1

Dalam progam tidak terdapat pembuatan dan pemanggilan thread sehingga prosesor secara otomatis hanya akan menjalankan program dalam satu thread.  Dapat dilihat dari output yang hanya menampilkan satu proses.


***Contoh Program Multi Thread

package uas.pbo;
    import java.util.Scanner;
public class FibonacciMultiThread {
    public static int n;
    public static void main(String[]args){
        System.out.println("Fibonacci\n");
        Scanner input = new Scanner(System.in);
        System.out.println("Masukkan jumlah bilangan : ");
        n = input.nextInt();
        Fibo threadfibo1 = new Fibo("fibo1");
        threadfibo1.setPriority(1);
        Fibo threadfibo2 = new Fibo("fibo2");
        threadfibo2.setPriority(1);
        Fibo threadfibo3 = new Fibo("fibo3");
        threadfibo3.setPriority(1);
        Fibo threadfibo4 = new Fibo("fibo4");
        threadfibo4.setPriority(10);
        Fibo threadfibo5 = new Fibo("fibo5");
        threadfibo5.setPriority(1);
        threadfibo1.start();
        threadfibo2.start();
        threadfibo3.start();
        threadfibo4.start();
        threadfibo5.start();
    }
}
class Fibo extends Thread{
    private String fiboname;
    Fibo(String name){
        fiboname = name;
    }
    public void run() {
        long a=0, b=1;
        for(int i=1; i<=FibonacciMultiThread.n; i++){
            if(i==1){
                System.out.println("Thread " + fiboname + " mulai");
            }
            System.out.println(fiboname + " " + a + "  ");
         
            long sum = a + b;
            a = b;
            b = sum;
            if(i==FibonacciMultiThread.n){
                System.out.println("Thread " + fiboname + " selesai");
            }
        }
    }
}

Hasil :

Fibonacci

Masukkan jumlah bilangan :
10
Thread fibo4 mulai
Thread fibo3 mulai
Thread fibo1 mulai
Thread fibo5 mulai
Thread fibo2 mulai
fibo4 0
fibo4 1
fibo4 1
fibo4 2
fibo4 3
fibo4 5
fibo4 8
fibo4 13
fibo4 21
fibo4 34
fibo3 0
fibo3 1
fibo3 1
fibo3 2
Thread fibo4 selesai
fibo3 3
fibo3 5
fibo3 8
fibo3 13
fibo3 21
fibo3 34
Thread fibo3 selesai
fibo1 0
fibo1 1
fibo2 0
fibo2 1
fibo2 1
fibo1 1
fibo1 2
fibo1 3
fibo1 5
fibo2 2
fibo2 3
fibo2 5
fibo2 8
fibo2 13
fibo2 21
fibo2 34
fibo5 0
Thread fibo2 selesai
fibo1 8
fibo1 13
fibo1 21
fibo1 34
fibo5 1
fibo5 1
Thread fibo1 selesai
fibo5 2
fibo5 3
fibo5 5
fibo5 8
fibo5 13
fibo5 21
fibo5 34
Thread fibo5 selesai

Dari progam tersebut  kami membuat banyak thread dalam satu proses di program yang dibuat. Membuat class baru yang bernama Fibo yang memanggil (extends) thread  dan setiap thread di deklrasikan dalam string fiboname . Dalam class utama, dibuat  banyak objek dari class fibo yang memanggil thread. Lalu dibuat prioritas untuk proses jalannya thread (setPriority()). Disini kami membuat prioritas thread fibo4 menjadi 10 dan yang lain prioritas 1. Sehingga, threadfibo4 lebih diprioritaskan daripada thread yang lain karena semakin besar nilai yang dimasukkan akan semakin diprioritaskan.
Dari output diatas dapat dilihat bahwa thread fibo4 lebih diprioritaskan daripada thread yang lain

Tidak ada komentar:

Posting Komentar