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..
 
great blog bro.. :D
ReplyDeletesmoga banyak membantu orang..
ok bro..
ReplyDeletehehe
apa beda multithread and multiprocess?
ReplyDeletekalo dari segi scope-ny mungkin proses itu lebih besar dari pada thread, jadi thread ada dalam proses
Deletesip min, makasih
ReplyDeleteAlat pemisah lcd