Anda di halaman 1dari 6

48 MODUL 13 Threads 2 x pertemuan (Pertemuan 13 ,14) 1.

Tujuan Mahasiswa dapat membuat treads dengan menggunakan pemrograman java Mahasiswa dapat menjelaskan kegunaan treads

2. Teori Singkat Sebuah thread, secara definisi adalah sebuah proses ringan. Mereka digunakan untuk meningkatkan fungsionalitas dan performansi dengan cara melakukan beberapa tugas pada saat yang sama, yaitu bersamaan. Ada dua metode untuk menerapkan thread di dalam Java : 1. penerapan sebuah antarmuka 2. perpanjangan sebuah class Tread merupakan pemrograman Java tingkat menengah, untuk itu mahasiswa diharapkan sudah mengenal dengan konsep-konsep dasar Object Oriented Paradigm dan mengerti dengan istilah seperti 'extending', 'interface' dan 'class'. Alasan mengapa ada dua cara membuat thread. Hail Ini dikarenakan jika sebuah class sudah menjadi sebuah class turunan dari beberapa class selain 'Thread', maka ini tidak dapat memperpanjang 'Thread' karena beberapa turunan tidak diperbolehkan di dalam pemrograman bahasa Java. Jadi, dalam kasus seperti itu kita gunakan antarmuka 'Runnable' sebagai gantinya. Cara membuat thread. Metode pertama adalah memperpanjang atau menurunkan class 'Thread'. Class 'Thread' didefinisikan di dalam paket java.lang, dimana perlu diimpor. Perhatikan kode dibawah untuk mendapat ide yang lebih baik : import java.lang.*; public class myExample extends Thread { public void run() { .... } }

49

Cara yang lain untuk melakukan hal ini dengan cara menerapkan 'Runnable', seperti terlihat dibawah,

import java.lang.*; public class myExample implements Runnable { Thread T; public void run() { .... } } Perhatikan pada kedua metode menggunaan fungsi 'run()', dimana bertanggung jawab pada kerja thread. Antarmuka 'Runnable' sebenarnya bukan apa-apa tetapi sebuah class yang berisi hanya satu metode abstrak, 'public abstract void run();'. Yang perlu diingat adalah bahwa sebuah antarmuka hanya menyediakan sebuah rancangan framework atas class yang dapat diterapkan. Ini juga menarik untuk dicatat bahwa sebenarnya class 'Thread' juga menerapkan antarmuka 'Runnable'.

Menciptakan Thread : Thread thread = new Thread(); thread.start(); Pada kode Thread diatas tidak melakukan sesuatu apapun yg berguna, agar Thread tsb bisa berguna maka dibutuhkanmethod run(),ada 3 buah cara tuk menciptakan Thread dgn method run() -nya.

Praktik PRAKTIK 1 1. Meng-Extends class Thread public class MyThread extends Thread{ public void run(){ //buat suatu pekerjaan disini, misal print sesuatu ke console System.out.println("Tread yang pertama"); } //untuk menciptakan & menjalankan MyThread dilakukan dengan kode
program berikut:

public static void main(String[] args){ Thread myThread = new MyThread(); myThread.start(); } }

50

PRAKTIK 2 2. Meng-implementasi interface Runnable Kadang kita tidak mau membuat class sendiri untuk Thread,melainkan menginginkan Thread itu berjalan di class yg membutuhkan Thread, disini kita bisa menggunakan Runnable interface. public class MyClass extends ClassYangLainBodoAmatApaan implements Runnable{ public MyClass(){ Thread thread = new Thread(this); thread.start(); } public void run(){ //buat suatu pekerjaan disini, misal print sesuatu ke console System.out.println("asiik gua dijalanin duluan"); } //tuk menjalankan MyClass di main method gak perlu lg ciptakan Thread dgn method start() krn di constructor sudah ada public static void main(String[] args){ new MyClass (); } }

PRAKTIK 3 3. Dengan menggunakan Anonymous Inner Classes Kadang kita tidak ingin menciptakan class untuk Thread dan kondisinya tidak cocok untuk pake interface Runnable. Jika hal tersebut terjadi, maka kita bias membuat anonymous inner class, spt ini: public class MyClass{ public MyClass(){ new Thread(){ public void run(){ //buat suatu pekerjaan disini, misal print sesuatu ke console System.out.println("asiik gua dijalanin duluan"); } }.start(); } //tuk menjalankan MyClass di main method gak perlu lg ciptakan Thread dgn method start() krn di constructor sudah ada public static void main(String[] args){ new MyClass (); } }

51

PRAKTIK 4 Ketik dan jalankan program dibawah ini kemudian amati hasilnya. public class TestingThread implements Runnable { private boolean sleeping; public TestingThread { } public void start() { Thread t = new Thread(this); t.start(); } public void stop() { sleeping = true; } public void run() { while(!sleeping) { System.out.println("Thread sedang berjalan"); try { Thread.sleep(1000); } catch(InterruptedException ie) { } } } public static void main(String[] args) { TestingThread test = new TestingThread(); test.start(); } } 4. Latihan pembuatan contoh suatu progress dengan memanfaatkan class SwingWorker : // Class CounterTask.java import javax.swing.JTextArea; import javax.swing.SwingWorker; public class CounterTask extends SwingWorker<Integer, Integer> { private static final int DELAY = 1000; private JTextArea textArea; // A calling application must pass a JTextArea public CounterTask(JTextArea textArea) { this.textArea = textArea; } @Override protected Integer doInBackground() throws Exception { int i = 0; int count = 10; while (! isCancelled() && i < count) {

52

i++; publish(new Integer[] {i}); setProgress(count * i / count); Thread.sleep(DELAY); process(i); } return count; } protected void process(Integer... chunks) { for (int i : chunks) textArea.append(i + "n"); } @Override protected void done() { if (isCancelled()) textArea.append("Cancelled !"); else textArea.append("Done !"); } } // class SwingWorkerDemo.java import java.awt.LayoutManager; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.SwingUtilities; public class SwingWorkerDemo { private static void constructGUI() { // Text area that displays results JTextArea textArea = new JTextArea(10, 20); // Progress bar displaying the progress of the // time-consuming task final JProgressBar progressBar = new JProgressBar(0, 10); final CounterTask task = new CounterTask(textArea); task.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if ("progress".equals(evt.getPropertyName())) { progressBar.setValue((Integer)evt.getNewValue()); } } });

53

// Start button JButton startButton = new JButton("Start"); startButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { task.execute(); } }); // Cancel button JButton cancelButton = new JButton("Cancel"); cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { task.cancel(true); } }); JPanel buttonPanel = new JPanel(); buttonPanel.add(startButton); buttonPanel.add(cancelButton); JPanel cp = new JPanel(); LayoutManager layout = new BoxLayout(cp, BoxLayout.Y_AXIS); cp.setLayout(layout); cp.add(buttonPanel); cp.add(new JScrollPane(textArea)); cp.add(progressBar); JFrame frame = new JFrame("SwingWorker Demo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setContentPane(cp); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { constructGUI(); } }); } } amati dan buatlah kesimpulan dari program diatas, sertakan dalam listing

5. TUGAS Diberikan oleh dosen pengampu praktikum

Anda mungkin juga menyukai