Tampilkan postingan dengan label Threads [Java]. Tampilkan semua postingan
Tampilkan postingan dengan label Threads [Java]. Tampilkan semua postingan

Minggu, 09 Februari 2014

Threads [Java]

Definisi Thread
Sebuah thread merupakan sebuah pengontrol aliran program. Untuk lebih mudahnya, bayangkanlah thread sebagai sebuah proses yang akan dieksekusi didalam sebuah program tertentu. Penggunaan sistem operasi modern saat ini telah mendukung kemampuan untuk menjalankan beberapa program. Misalnya, pada saat Anda mengetik sebuah dokumen di komputer Anda dengan menggunakan text editor, dalam waktu yang
bersamaan Anda juga dapat mendengarkan musik, dan surfing lewat internet di PC Anda. Sistem operasi yang telah terinstal dalam computer Anda itulah yang memperbolehkan Anda untuk menjalankan multitaskting. Seperti itu juga sebuah program (ibaratkan di PC Anda), ia juga dapat mengeksekusi beberapa proses secara bersama-sama(ibaratkan beberapa aplikasi berbeda yang bekerja pada PC Anda).
Sebuah contoh aplikasi adalah HotJava browser yang memperbolehkan Anda untuk browsing terhadap suatu page, bersamaan dengan mendownload object yang lain, misalnya gambar, memainkan animasi, dan juga file audio pada saat yang bersamaan.

State dari Thread
1. Running
Sebuah thread yang pada saat ini sedang dieksekusi dan didalam control dari CPU.
2. Ready to run
Thread yang sudah siap untuk dieksekusi, tetapi masih belum ada kesempatan untuk melakukannya.
3. Resumed
Setelah sebelumnya di block atau diberhentikan sementara, state ini kemudian siap untuk dijalankan.
4. Suspended
Sebuah thread yang berhenti sementara, dan kemudian memperbolehkan CPU untuk menjalankan thread lain bekerja.
5. Blocked
Sebuah thread yang di-block merupakan sebuah thread yang tidak mampu berjalan, karena ia akan menunggu sebuah resource tersedia atau sebuah event terjadi.


Sebuah contoh thread "CountDown GUI"
Kode program :

import javax.swing.*;import java.awt.*;
class CountDownGUI extends JFrame {
JLabel label;
CountDownGUI(String title) {
super(title);
label = new JLabel("Start count!");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(new Panel(), BorderLayout.WEST);
getContentPane().add(label);
setSize(300,300);
setVisible(true);
}
void startCount() {
try {
for (int i = 10; i > 0; i--) {
Thread.sleep(1000);
label.setText(i + "");
}
Thread.sleep(1000);
label.setText("Count down complete.");
Thread.sleep(1000);
} catch (InterruptedException ie) {
}
label.setText(Thread.currentThread().toString());
}
public static void main(String args[]) {
CountDownGUI cdg = new CountDownGUI("Count down GUI");
cdg.startCount();
}
}


Screenshot :


Output :
1) memulai perhitungan dari 10 sampai 0





 2) setelah countdown selesai

3) Thread terdeteksi




Sumber : JENI (Java Education Network Indonesia)





Minggu, 02 Februari 2014

Sebuah contoh penggunaan method join

Sebuah contoh penggunaan method join
Sekarang, pada saat Anda telah mempelajari bagaimana membuat sebuah thread, marilah kita lihat bagaimana method join bekerja. Contoh dibawah ini adalah salah satu contoh penggunaan method join tanpa argument. Seperti yang dapat Anda lihat, bahwa method tersebut (yang dipanggil tanpa argumen) akan menyebabkan thread yang sedang bekerja saat ini menungggu sampai thread yang memanggil method ini selesai dieksekusi.

sebelum membuat class maka buatlah sebuah java project dengan cara klik File --> New --> Java Project , maka akan muncul tampilan seperti gambar dibawah ini :


setelah membuat java project maka kita akan membuat kelas, seperti gambar dibawah ini dengan cara klik File --> New --> Class maka akan muncul tampilan seperti gambar dibawah ini :


Kode program :


class PrintNameThread implements Runnable {
Thread thread;
PrintNameThread(String name) {
thread = new Thread(this, name);
thread.start();
}
public void run() {
String name = thread.getName();
for (int i = 0; i < 100; i++) {
System.out.print(name);
}
}
}
class TestThread {
public static void main(String args[]) {
PrintNameThread pnt1 = new PrintNameThread("A");
PrintNameThread pnt2 = new PrintNameThread("B");
PrintNameThread pnt3 = new PrintNameThread("C");
PrintNameThread pnt4 = new PrintNameThread("D");
System.out.println("Running threads...");
try {
pnt1.thread.join();
pnt2.thread.join();
pnt3.thread.join();
pnt4.thread.join();
} catch (InterruptedException ie) {
}
System.out.println("Threads killed."); //dicetak terakhir
}
}
 
Screenshot :


 Output :




Sumber : JENI (Java Education Netwrok Indonesia)

Percobaan Komunikasi antar thread

Percobaan Shared data :

sebelum membuat class maka buatlah sebuah java project dengan cara klik File --> New --> Java Project , maka akan muncul tampilan seperti gambar dibawah ini :


setelah membuat java project maka kita akan membuat kelas, seperti gambar dibawah ini dengan cara klik File --> New --> Class maka akan muncul tampilan seperti gambar dibawah ini :


kode program :



class SharedData {
int data;
boolean valueSet = false;
synchronized void set(int value) {
if (valueSet) { //baru saja membangkitkan sebuah nilai
try {
wait();
} catch (InterruptedException ie) {
}
}
System.out.println("Generate " + value);
data = value;
valueSet = true;
notify();
}
synchronized int get() {
if (!valueSet) { //produsen belum men-set sebuah nilai
try {
wait();
} catch (InterruptedException ie) {
}
}
System.out.println("Get " + data);
valueSet = false;
notify();
return data;
}
}
/* Bagian kode ini tidak ada yang berubah*/
class Producer implements Runnable {
SharedData sd;
Producer(SharedData sd) {
this.sd = sd;
new Thread(this, "Producer").start();
}
public void run() {
for (int i = 0; i < 10; i++) {
sd.set((int)(Math.random()*100));
}
}
}
class Consumer implements Runnable {
SharedData sd;
Consumer(SharedData sd) {
this.sd = sd;
new Thread(this, "Consumer").start();
}
public void run() {
for (int i = 0; i < 10 ; i++) {
sd.get();
}
}
}
class TestProducerConsumer {
public static void main(String args[]) throws Exception {
SharedData sd = new SharedData();
new Producer(sd);
new Consumer(sd);
}
}

Screenshot :

Lanjutan screen shot program (kode program nya terlalu panjang) :



Output :

Sumber : JENI (Java Education Netwrok Indonesia)

Komunikasi antar thread (Interthread)

Shared data
Contoh Produsen-Konsumen
Contoh dibawah ini adalah salah satu implementasi dari permasalahan produsenkonsumen. Sebuah kelas yang menyediakan method untuk membangkitkan dan mengurangi nilai dari integer yang dipisahkan dari class Produsen dan Konsumen thread.

sebelum membuat class maka buatlah sebuah java project dengan cara  klik File --> New --> Java Project , maka akan muncul tampilan seperti gambar dibawah ini :



setelah membuat java project maka kita akan membuat kelas, seperti gambar dibawah ini dengan cara klik File --> New --> Class maka akan muncul tampilan seperti gambar dibawah ini :


kode program :


class SharedData {
int data;
synchronized void set(int value) {
System.out.println("Generate " + value);
data = value;
}
synchronized int get() {
System.out.println("Get " + data);
return data;
}
}
class Producer implements Runnable {
SharedData sd;
Producer(SharedData sd) {
this.sd = sd;
new Thread(this, "Producer").start();
}
public void run() {
for (int i = 0; i < 10; i++) {
sd.set((int)(Math.random()*100));
}
}
}
class Consumer implements Runnable {
SharedData sd;
Consumer(SharedData sd) {
this.sd = sd;
new Thread(this, "Consumer").start();
}
public void run() {
for (int i = 0; i < 10 ; i++) {
sd.get();
}
}
}
class TestProducerConsumer {
public static void main(String args[]) throws Exception {
SharedData sd = new SharedData();
new Producer(sd);
new Consumer(sd);
}
}

Screenshot :



Output :



Sumber : JENI (Java Education Network Indonesia)

Membuat Threads

Membuat Threads
Sebuah thread dapat diciptakan dengan cara menurunkan (extend) class Thread ata dengan mengimplementasikan sebuah interface Runnable.

Menurunkan (extend) class Thread
Contoh berikut ini adalah user akan mendefinisikan sebuah class Thread yang akan menuliskan nama dari sebuah object thread sebanyak 100 kali.

sebelum membuat class maka buatlah sebuah java project dengan cara klik File --> New --> Java Project , maka akan muncul tampilan seperti gambar dibawah ini :


setelah membuat java project maka kita akan membuat kelas, seperti gambar dibawah ini dengan cara klik File --> New --> Class maka akan muncul tampilan seperti gambar dibawah ini :


Kode Program :


class PrintNameThread extends Thread {
PrintNameThread(String name) {
super(name);
// menjalankan thread dengan satu kali instantiate
start(); }
public void run() {
String name = getName();
for (int i = 0; i < 100; i++) {
System.out.print(name);
}
}
}
class TestThread {
public static void main(String args[]) {
PrintNameThread pnt1 = new PrintNameThread("A");
PrintNameThread pnt2 = new PrintNameThread("B");
PrintNameThread pnt3 = new PrintNameThread("C");
PrintNameThread pnt4 = new PrintNameThread("D");
}
}

Perhatikan bahwa variable reference pnt1, pnt2, pnt3, dan pnt4 hanya digunakan satu kali. Untuk aplikasi ini, variabel yang menunjuk pada tiap thread pada dasarnya tidak dibutuhkan. Anda dapat mengganti body dari main tersebut dengan pernyataan berikut ini:

new PrintNameThread("A");
new PrintNameThread("B");
new PrintNameThread("C");
new PrintNameThread("D");


Screenshot :



Output :
1
lanjutan output
lanjutan output


Sumber : JENI (Java Education Network Indonesia)