Sunday, March 20, 2011

contoh program multithreading java

Multithreading merupakan istilah yang digunakan untuk merepresentasikan sebuah proses yang bekerja dengan banyak thread. thread bisa diartikan sebagai subproses. sebuah contoh sederhana yaitu pada saat kita melakukan printing dokumen dengan menggunakan microsoft word kita masih dapat melakukan aktifitas lainnya tanpa harus menunggu proses printing selesai. hal tersebut terjadi karena proses printing dilakukan oleh sebuah thread sendiri. konsep multithreading juga sangat banyak diimplementasikan dalam pembuatan game, misalnya game yang melibatkan proses penghitung waktu akan membuat sebuah thread sendiri untuk melakukan tugas tersebut. lebih lengkap tentang konsep multithreading akan dibahas pada posting selanjutnya :)

program berikut akan menggambarkan sedikit tentang konsep multithreading di java

ShowTime.java

import java.util.Date;

public class ShowTime implements Runnable {
 
 private ShowTimeFrame STF = new ShowTimeFrame();
 private static Date now = new Date();
 private static int ss = now.getSeconds();
 private int mm = now.getMinutes();
 private int hh = now.getHours(); 
 private boolean runClock = true;
 
 public void setSS(int data) {
  ss = data;
 }
 
 public int getSS() {
  return ss;
 }
 
 public ShowTime() {
  Thread threadShowTime = new Thread(this);
  threadShowTime.start();
 }
 
 public void run() {
  while (runClock) {
   STF.getTextClock().setText(hh+":"+mm+":"+ss);
   
   try {
    Thread.sleep(1000); 
   } catch (InterruptedException IE) {
    IE.printStackTrace();
   }
   ss++;
   clock();
  } 
 }
 
 public void clock() {
  if (ss > 59) {
   ss = 0;
   mm = mm + 1;
   if (mm > 59) {
    mm = 0;
    hh = hh + 1;
    if (hh > 23) {
     hh = 0;
    }
   }
  }   
 }
 
 public static void addSecond(int second) {
   ss = ss + second; 
 }
}

ShowTimeFrame.java

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class ShowTimeFrame extends JFrame implements ActionListener {
 private JTextField textClock;
 
 public ShowTimeFrame() {
  initWindow();
 }
 
 public JTextField getTextClock() {
  return textClock;
 }
 
 public void initWindow() {  
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setLocationRelativeTo(null);
  setResizable(false);
  setBounds(0,0,250,100);
  setTitle("java multithreading");
  
  textClock = new JTextField();
  textClock.setLocation(5,10);
  textClock.setSize(new Dimension(80,25));
  textClock.setHorizontalAlignment(JTextField.CENTER);
  textClock.setEditable(false);
  
  JButton addSec = new JButton("add 10 seconds");
  addSec.setLocation(90,10);  
  addSec.setSize(new Dimension(150,25));
  addSec.addActionListener(this);
  
  getContentPane().setLayout(null);
  getContentPane().add(textClock);
  getContentPane().add(addSec);
  setVisible(true);
 }
 
 public synchronized void actionPerformed(ActionEvent event) {
  ShowTime.addSecond(10); 
 }
} 

Main.java

public class Main {
 public static void main (String[] args) {
  ShowTime ST = new ShowTime();
 }
}

program terdiri dari 3 file yaitu ShowTime.java, ShowTimeFrame.java, dan Main.java. ShowTime.java berfungsi sebagai kelas yang menyediakan proses yang akan dikerjakan oleh aplikasi, ShowTimeFrame.java befungsi sebagai kelas yang akan menyediakan UI, dan Main.java hanya kelas tambahan yang akan menjalankan aplikasi (driver). jika aplikasi di-run maka akan muncul tampilan seperti berikut:


program akan menampilkan current time dari system. kemudian terdapat sebuah JButton yang berfungsi untuk menambahkan detik dari waktu yang ditampilkan pada JTextfiedl. proses untuk menampikan waktu serta melakukan update waktu dilakukan oleh sebuah thread tersendiri, proses yang akan menangkap event pada saat user menekan JButton juga dilakukan oleh thread sendiri, sehingga kedua proses tersebut dapat berjalan secara paralel.

kalo ada kesalahan mohon dikoreksi.. :)
semoga bermanfaat..

5 comments:

  1. great blog bro.. :D
    smoga banyak membantu orang..

    ReplyDelete
  2. apa beda multithread and multiprocess?

    ReplyDelete
    Replies
    1. kalo dari segi scope-ny mungkin proses itu lebih besar dari pada thread, jadi thread ada dalam proses

      Delete