++Hakim;

On Languages & Programming Languages

Thread dengan Java

Ditulis oleh Muhammad Hakim di/pada 23 Maret 2008 1:35 pm

sekarang saya akan coba memberikan sebuah contoh sederhana membuat program multithread dengan java.

kasus:

penjumlahan bilangan – bilangan yang terdapat dalam 3 buah array (tipe integer). dengan aturan bahwa tiap bilangan pada satu array hanya dijumlahkan dengan bilangan pada array yang lain yang memiliki index yang sama

array 1 : 1 2 3 4 5

array 2 : 6 7 8 9 10

array 3 : 11 12 13 14 15

——————————+

jml : 18 21 24 27 30

asumsi: ukuran array sama (5)

menghitung penjumlahan ini secara linear tentu juga sangat mudah, tinggal melakukan iterasi dan lakukan penjumlahan:


// solusi linear
for (int h = 0; h < arr1.length; h++){
	System.out.printf("sum[%d] = %d\n",h, arr1[h] + arr2[h] + arr3[h]);
}

cara lain untuk melakukan penghitungan adalah dengan memanfaatkan thread, karena setiap perhitungan adalah independen satu sama lain di setiap index-nya maka kita dapat mendedikasikan satu thread untuk setiap operasi penjumlahan tersebut, wah sia2 dong? mungkin iya untuk kasus ini, tapi demi kepentingan membuat contoh pemanfaatan thread, dan yang lebih penting lagi, yang merupakan alasan saya membuat contoh ini adalah, jika anda membayangkan masing – masing operasi penjumlahan tersebut adalah sebuah operasi yang memerlukan waktu yang panjang, maka akan lebih baik untuk memanfaatkan thread bukan?, bayangkan jika anda memilih cara linear, satu operasi baru di jalankan setelah operasi lain berhenti, wah bisa lama dong. disamping itu saat ini sudah jamak penggunaan processor multicore, kemampuan anda untuk memahami threading akan membantu anda untuk memaksimalkan kinerja processor (melakukan eksekuse secara paralel alih – alih secara serial).

membuat thread dalam java ada 2 cara, yang membuat kelas yang di turunkan dari kelas Thread, atau kelas yang mengimplementasikan (implements) interface Runnable. untuk sekarang saya memilih cara pertama:


/** kelas simpleThread file simpleThread.java */
public class simpleThread extends Thread{
	private String threadName;
	private int sum;
	private int num1, num2, num3;
	public simpleThread(String name){
		super();
		threadName = name;
	}

	public void setNum(int n1, int n2, int n3){
		num1 = n1;
		num2 = n2;
		num3 = n3;
	}

	public void run(){
		try{
			sum = num1 + num2 + num3;
			System.out.printf("%s calculate %d+%d+%d = %d \n", threadName,num1,num2,num3,sum);
			Thread.sleep(100);
		}catch(InterruptedException ex){
			ex.printStackTrace();
		}
	}
}

/** kelas threadTester file threadTester.java, fungsi: tester thread*/ 
public class threadTester {
	public static void main(String[] args){
		int[] arr1 = {1,2,3,4,5};	// array 1
		int[] arr2 = {6,7,8,9,10};	// array 2
		int[] arr3 = {11,12,13,14,15};	// array3

		// solusi linear
		for (int h = 0; h < arr1.length; h++){
			System.out.printf("sum[%d] = %d\n",h, arr1[h] + arr2[h] + arr3[h]);
		}

		// solution 2 : multi thread
		for (int i=0; i < arr1.length ; i++){
			simpleThread st = new simpleThread("Thread "+i);
			st.setNum(arr1[i], arr2[i], arr3[i]);
			st.start();
		}

		//st1.stop();
	}
}

outputnya kurang lebih begini:

Thread 0 calculate 1+6+11 = 18
Thread 2 calculate 3+8+13 = 24
Thread 4 calculate 5+10+15 = 30
Thread 1 calculate 2+7+12 = 21
Thread 3 calculate 4+9+14 = 27

anda lihat, perhitungan tidak di lakukan secara linear. tentunya solusi ini masih bukanlah solusi terbaik (namanya juga contoh sederhana :) ), dan bahkan aneh :D dan tugas anda adalah membuat solusi lebih baik lagi hihi, selamat belajar :D

5 Tanggapan ke “Thread dengan Java”

  1. [...] dana IDR 50000 dan terinspirasi dari tulisan ronald dan tulisan saya beberapa waktu yang lalu di wordpress, saya coba menulis sebuah contoh sangat sederhana membuat thread di c#. kelas thread di c# ada di [...]

  2. zeemyblog berkata

    makasih infonya. bagus untuk referensi saya.

  3. jampasir berkata

    sama – sama :)

  4. Kyuro berkata

    Boz aku lagi ada tugas kuliah nech buat threading calculate n aku g begitu paham masihan..gimana zaaa mungkin bisa bantu lewat emailku za?

  5. Kyuro berkata

    oh za lupa emailku kyuro.informatika@gmail.com

Tinggalkan Balasan

XHTML: Anda dapat gunakan tag ini: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>