Multi-threading in Java

Satu program boleh melaksanakan dua (atau lebih) action sama ada secara bersequence (One after another) atau secara selari (parellel). Dalam modus bersequence, jika satu program perlu memanggil (call) dua method dari kelas yang berbeza, method yang ke dua hanya akan dipanggil, setelah selesai method pertama di panggil dan selesai melaksanakan tugasnya. Dengan kata lain, program itu hanya mempunyai satu thread of execution.

Jika ada dua method yang yang tidak bergantung antara satu dengan lain, kita boleh mempercepatkan pelaksanaan dua method berkenaan, dengan cara memanggilnya dalam satu masa yang sama yang dipanggil multi-threaded.

Dalam contoh di bawah ada tiga kelas: MyPortal, StockServer dan NewServer. Kelas MyPortal adalah kelas utama yang mempunyai method satu  submitResult yang mana ia akan dipanggil dari dua kelas lain (StockServer dan NewServer), dengan memberikan nilai String yang berbeza. Method pertama (MyPortal), akan create dua thread dari dua kelas(StockServer/NewServer) tadi (warna biru), dan melarikannya serantak, dengan method start (Warna merah).

Lihat contoh di bawah;

Kelas utama: MyPortal

import java.util.ArrayList;
public class MyPortal {
   ArrayList dataToDisplay = new ArrayList();
    public static void main(String args[]){
       MyPortal mp =new MyPortal();
       // Spawn the threads and pass them the referennce
       // to the instance of MyPortal
       NewsServer myNews = new NewsServer(mp);
       Thread newsThread = new Thread(myNews);

       StockServer myStocks = new StockServer(mp);
       Thread stockThread = new Thread(myStocks);

       //Start the threads
       newsThread.start();
       stockThread.start();

       try {
          System.out.println(“MyPortal is sleeping…!”);
         Thread.sleep(10000); // wait for 10 sec
      } catch (InterruptedException e) {
         e.printStackTrace();
      }

      System.out.println(“Good bye!”);
   }

    // Add the data returned by a thread to collection
    public void submitResult(String data){
       dataToDisplay.add(data);

       // Print the data if both threads have submitted the data
       // (a buggy version)
       if (dataToDisplay.size()==2){
           System.out.println(dataToDisplay);
       }
    }
}

Kelas ke dua: StockServer

public class StockServer implements Runnable {
    MyPortal papa;
    // Constructor
    StockServer(MyPortal parent){
          papa=parent;
    }

    public void run() {
   // Sleep for 3 seconds to emulate some processing
   // and return a string with the market data to the parent
    try {
      Thread.sleep(3000);
      papa.submitResult(“The stock market is on the rise!”);
   } catch (InterruptedException e) {
         e.printStackTrace();
   }
    }
}

Kelas ke tiga: NewsServer

public class NewsServer implements Runnable {
    MyPortal papa;

    // Constructor
    NewsServer(MyPortal parent){
          papa=parent;
    }

   public void run() {
   // Sleep for 4 seconds to emulate some processing
   // and return a string with the news to the parent

      try {
         Thread.sleep(4000);
         papa.submitResult(“We have  good and bad news”);
      } catch (InterruptedException e) {
         e.printStackTrace();
      }
   }
}

Advertisements

~ by atjamil on April 27, 2007.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: