BAB 2 COLLECTION & THREAD

dokumen-dokumen yang mirip
Pada pembuatan game di java, sering kali para programer. mendefinisikan banyak object seperti suara, gambar, dan grafik geometri yang

1. Latar Belakang Didalam pembuatan game java sering kali kita mendefinisikan banyak object seperti gambar, dan grafik geometri yang begitu banyak,

Score: 94.0 Persentage: % ~ u ~ Generated by Foxit PDF Creator Foxit Software For evaluation only.

Pemrograman Berorientasi Obyek (IT251) Ramos Somya, S.Kom., M.Cs.

03/04/2018. Collection set List Map. Pemrograman Berorientasi Object

BAB 2. Class Thread. Setelah mempelajari modul ini peserta diharapkan dapat: Mengenal Kelas Thread Menggunakan Kelas Thread dalam aplikasi

Thread. 16 th week Estu Sinduningrum ST,MT

PEMROGRAMAN BERORIENTASI OBJEK COLLECTION DAN MULTITHREADING. ADAM MUKHARIL BACHTIAR TEKNIK INFORMATIKA UNIKOM

PERTEMUAN VII Multithreaded Programming. Praktikan mampu membuat program sederhana mengenai threading

Pemrograman Berorientasi Objek Collection dan Multithreading. Adam Mukharil Bachtiar Teknik Informatika UNIKOM

Mengunci sebuah object: Untuk memastikan bahwa hanya satu thread yang mendapatkan hak akses kedalam method tertentu

MODUL III ARRAYLIST TUGAS PENDAHULUAN

Kelompok 12. Thread Java

Java Progamming Multithreading

Exception Handling and Multithreading

Pemrograman Berorientasi. Array dan Collections

Gambar 1. Single Linked List

Grouping Object. Viska Mutiawani, M.Sc

PERTEMUAN III OBJEK DAN CLASS TUJUAN PRAKTIKUM

Java Collections Framework

IMPLEMENTASI STRUKTUR DATA LIST, QUEUE DAN STACK DALAM JAVA

Java Generic & Collection

IF PEMROGRAMAN LANJUT GENERIC. Oleh : Andri Heryandi, M.T.

KUM 3 IMPLEMENTASI LIST

Class Thread juga menyediakan beberapa constants sebagai nilai prioritas. Tabel berikut ini adalah rangkuman dari class Thread.

PENANGANAN EKSEPSI. class Exc0 { public static void main (String args[]) { int d = 0; int a = 42 / d; } }

1.Tujuan. 2. Latar Belakang

BONUS. Dasar Java Mobile. Mengenal Java Mobile Mengenal MIDlet Mobile Grafis Mobile Animasi Latihan Soal

BAB IX THREAD Thread ClassThread namavar = new ClassThread(); Namavar.start(); New ClassThread().start();

Pemrograman Berbasis Objek. Collections. Politeknik Elektronika Negeri Surabaya

ILUSTRASI KLASIK: BOUNDED BUFFER

Gambar 1. Single Linked List

game yang dibangun lebih semakin hidup dan terasa nyata, hal ini juga yang membuat para pemain lebih tertarik, bayangkan apabila di dalam suatu

PEMROGRAMAN JAVA : THREAD

Collections. Collections Framework

Pemrograman Berorientasi Obyek Lanjut (IT251) Ramos Somya, S.Kom., M.Cs.

PERTEMUAN 3 OBJEK DAN CLASS

Gambar 1. Single Linked List

E-Book PEMROGRAMAN BERORIENTASI OBJEK. Disusun Oleh: Arfian Hidayat, S.Kom

Score: Persentase: % ~ u ~ Generated by Foxit PDF Creator Foxit Software For evaluation only.

Koneksi Java GUI-Database

EXCEPTION HANDLING. 1. Mampu menangani eksepsi 2. Mengetahui dan memahami tentang multithreading 3. Dapat membuat program tentang exception handling

PERTEMUAN 7 MULTITHREADED PROGRAMMING

Laporan Tugas Scheduling Pengantar Sistem Operasi

PERCOBAAN 6 EXCEPTION

Java Thread Games Series

Variabel dengan tipe dasar hanya dapat menyimpan sebuah nilai

Pemrograman Berorientasi Obyek Lanjut (IT251) Ramos Somya, S.Kom., M.Cs.

2. Pilih instruksi yang dapat digunakan dalam method actionperformed untuk membedakan antara tombol buttonone dan buttontwo.

LAMPIRAN. Panggil class Singleapplication modul Run. IF Run == false THEN. Program ini akan keluar. Form_utama. InitializeComponent

Monitor. Process Synchronization. SISTIM OPERASI (IKI-20230) ProcessSynchronization Ch. 6. Johny Moningka

Jika Anda ingin bisa/sukses dalam kuliah SDA ini, rajinlah mengimplementasikan ADT dan mengerjakan soal-soal yang diberikan.

PRAKTIKUM 6 EXCEPTION

Jobsheet 16 String dan Collection (List, Set, Map)

Percobaan 6 Exception

Bab 26. Readers/Writers

1. Mampu mengimplementasikan thread dalam sebuah aplikasi 2. Memahami kegunaan thread dalam aplikasi

IT652 Pemrograman Berorientasi Aspek. Ramos Somya

1. Tujuan. 2. Latar Belakang. 3. Percobaan. Modul Praktikum TiledLayer

Cara Membaca File Text di JAVA

Modul Praktikum Bahasa Pemrograman 1

Praktikum. PBO (Kelas K) Oleh : MOHAMMAD SHOLIKIN

Algoritma dan Struktur Data. Queue

A. TUJUAN PEMBELAJARAN 1. Mengetahui cara menangani exception dengan cara melempar exception. 2. Mengetahui cara membuat sendiri class exception.

Bab 9. Mengetahui teknik yang berbeda dalam optimisasi aplikasi mobile

IF PEMROGRAMAN LANJUT TUGAS 1. Oleh : Andri Heryandi, M.T.

Pengenalan JavaScript

TUGAS SISTEM TERDISTRIBUSI MULTYTHREAD EKO SURIPTO P

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA STACK

Pemrograman Berorientasi. Class dan Obyek 2

Pemrograman Berorientasi. Abstract & Interface

1. Tujuan. 2. Latar Belakang. 3. Percobaan. Modul Praktikum Layer Manager

KASUS INHERITANCE. (Window, Multithreading dan Applet)

Modul ini mengenalkan Anda konsep dasar mengenai Java generic types.

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA LINKED LIST (BAGIAN 1)

A. TUJUAN PEMBELAJARAN 1. Memahami konsep Class LinkedList di Collection 2. Memahami penggunaan method-method pada Class LinkedList.

INSTITUT TEKNOLOGI SUMATERA COLLECTION: SET DAN MAP

MODUL 2 Constructor. Tujuan: Mahasiswa dapat mengenal dan memahami konsep constructor dan overloading constructor

Badiyanto, S.Kom., M.Kom. PBO java

Modul Pelatihan : Pembuatan Game Animasi Menggunakan Greenfoot

BAB IV IMPLEMENTASI DAN PENGUJIAN

Politeknik Elektronika Negeri Surabaya

Belajar ArrayList di Java

Generics. Prepared by Viska Mutiawani. 1

Tabel 1. Instruksi untuk menampilkan teks No. Bahasa Pemrograman Instruksi 1. Pascal WRITE ( Bahasa pemrograman itu mudah );

Membuat dan Menggunakan Class

Bab 4 Hasil dan Pembahasan

IKG2I4 / Software Project I

Didalam menampilkan peta yang sudah kita buat, kita akan menggunakan Slick2D sebagai sebuah frameworknya.

BAHASA PEMROGRAMAN JAVA

GameCanvas digunakan untuk memperluas fungsi yang dimiliki oleh class Canvas

MODUL 6 PERULANGAN. A. String. 1. Instansiasi dan Inisialisasi. M0601xxyyy.jar

Konsep Lanjut Pemrograman Objek

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA QUEUE

1. Manakah jawaban yang benar,pada saat Anda mengcompile dan menjalankan class berikut ini:

Gambar Implementasi Halaman Pembuka 34

PEMAHAMAN DASAR DASAR JAVA

PEMROGRAMAN JAVA : VARIABEL DAN TIPE DATA

Bab 7. TiledLayer. Menyusun graphics dari TiledLayer dan di masukkan dalam LayerManager

Tujuan : A. Percabangan Percabangan di dalam Java terdapat 2 macam, yaitu dengan memakai if dan switch.

Transkripsi:

BAB 2 COLLECTION & THREAD 2.1 Pendahuluan Didalam pembuatan game java sering kali kita mendefinisikan banyak object seperti gambar, dan grafik geometri yang begitu banyak, untuk itu dibutuhkan suatu manajemen yang menangani hal tersebut atau lebih tepatnya sebuah object untuk menangani object-object dari gambar atau grafik yang dibuat. Java telah menyediakan sebuah container atau collection yang digunakan untuk menangani hal tersebut. Selain itu, seiring dengan banyaknya object gambar atau grafik geometri yang dibuat maka proses yang dibutuhkan juga memakan waktu yang cukup lama dimana dalam java penggambaran object itu dilakukan 1000 kali per detik yang sangat memberatkan kinerja dari procesor, oleh sebab itu kita membutuhkan thread untuk menangani hal terebut agar komputer kita berjalan dengan normal sesuai dengan keinginan. 2.2 Tujuan: Setelah mempelajari modul ini peserta diharapkan dapat: Memahami tentang interface Collection pada Java Mengerti tentang pembuatan Vector, ArrayList dan LinkedList. Membuat dan mengelolah Thread Memahami proses sinkronisasi data Menggunakan method Wait dan Notify 2.3 Collection Collection atau sering juga disebut sebagai container adalah sebuah object sederhana yang menampung lebih dari satu elemen di dalam satu kesatuan. Collection digunakan untuk menyimpan,mengambil dan memanipulasi data, juga mentransmisikan data dari satu method ke method lain. Collection khusus merepresentasikan data item dari bentuk yang sebenarnya seperti Poker (kumpulan dari kartu), direktori (kumpulan dari file atau folder), kotak surat (kumpulan dari suratsurat), dll. Pemrograman Game Java 1

SDK tidak menyediakan implementasi built-in yang lain dari interface ini tetapi mengarahkan subinterfaces, Set interfaces dan List interfaces diperbolehkan. Sekarang, apa perbedaan dari kedua interface tersebut. Set merupakan collection yang tidak dipesan dan tidak ada penggandaan didalamnya. Sementara itu, list merupakan collection yang dipesan dari elemen-elemen dimana juga diperbolehkannya penggandaan. HashSet, LinkedHashSet dan TreeSet adalah implementasi class dari Set interfaces. ArrayList, LinkedList dan Vector merupakan implementasi class dari List interfaces. <root interface> Collection <interface> Set <interface> List <implementing classes> <implementing classes> HashSet LinkedHashSet TreeSet ArrayList LinkedList Vector 2.3.1 Vektor Vektor adalah implementsi dari dinamis array, yang hampir sama dengan ArrayList perbedaanya adalah vector mempunyai method yang bukan turunan dari collection framework. Pada Java 2 vektor diperluas lagi dengan mengextends AbstractList dan mengimplementasikan List interface yang sangat mendukung collection. Dibawah ini adalah konstruktor dari Vector. Vector(); Vector(int size); Vector(int size,int incr); Konstruktor pertama adalah konstruktor default yang menginialisasikan ukuran sebanyak 10 elemen. Konstruktor kedua yaitu menentukan jumlah elemen yang akan digunakan. Konstruktor yang ketiga yaitu menentukan ukuran awal dan apabila ukurannya full maka akan ditambah lagi sebanyak incr. Dibawah ini beberapa method yang disediakan oleh class Vector. Pemrograman Game Java 2

Method addelement(<object>) elementat(<index>) lastelement() firstelement() clear() isempty() Keterangan Digunakan untuk menambahkan data object ke dalam Vektor. Method ini berfungsi untuk mengambil elemen berdasarkan nomor index yang dimasukan. Berfungsi untuk mengambil nilai berupa object yang paling terakhir di tambahkan dari sebuah object vektor. Berfungsi untuk mengambil nilai berupa object pertama yang di tambahkan dari sebuah object vektor. Digunakan untuk menghapus seluruh elemen yang tersimpan dalam object vector. Memeriksa apakah verktor yang digunakan berisi elemen atau tidak. Jika ada data maka akan mengembalikan nilai boolean berupa false. 2.3.2 ArrayList ArrayList hampir mirip seperti vektor. Pada JDK 1.1 ArrayList 3-4 kali lebih cepat dari pada Vektor, sedangkan pada JDK 1.1.4 ArrayList 40 kali lebih cepat daripada vektor. Pembuatan Object ArrayList dapat dilihat seperti dibawah ini. ArrayList al=new ArrayList(); Tidak seperti array dimana untuk mengambil ukuran menggunakan <array>.length, ArrayList menggunakan al.size(). Dibawah ini adalah beberapa method-method yang dapat digunakan pada ArrayList. add(<object>) Method Keterangan Digunakan untuk menambahkan data Pemrograman Game Java 3

add(<index>,<object>) get(<index>) remove(<index>) isempty() clear() object ke dalam ArrayList. Method ini menyediakan dua parameter untuk menambahkan sebuah object dengan menentukan nomor index elemennya. Method get adalah method yang disediakan oleh ArrayList untuk mengambil sebuah object berdasarkan nomor indexnya. Mothod ini berfungsi untuk menghapus elemen ArrayList berdasarkan nomor indexnya. Digunakan untuk memeriksa apakah object ArayList yang dibuat kosong atau tidak. Menghapus semua elemen yang ada di dalam object ArrayList. 2.3.3 LinkedList LinkedList mengimplementasi interface List. LinkedList juga memperbolehkan elemennya menggunakan null. Pertama yang harus kita lakukan adalah membuat object LinkedList seperti dibawah ini: LinkedList ll=new LinkedList(); Ada beberapa method yang disediakan class LinkedList antara lain adalah sebagai berikut: add(<object>) size() Method Keterangan Digunakan untuk menambahkan data object ke dalam LinkedList. Mengambil jumlah elemen pada object Pemrograman Game Java 4

get(<index>) addfirst() addlast() getfirst() getlast() clear() remove() remove(<index>) LinkedList Mengambil nilai elemen berdasarkan nomor index yang ada pada object LinkedList Menambahkan object pada elemen awal Menambahkan object pada elemen akhir Mengambil nilai elemen pertama Mengambil nilai elemen terakhir Menghapus semua nilai elemen pada object LinkedList Method remove tanpa parameter akan menghapus elemen pertama Parameter akan menunjukan elemen mana yang akan dihapus 2.4 Thread 2.4.1 Membuat dan Memulai Thread Sebuah thread dapat dengan mudah anda buat dan jalankan dengan cara membuat instance dari object Thread dan memanggil method start(). Thread mythread= new Thread(); mythread.start(); Saat anda menjalankan kode diatas tentu saja tidak akan ada yang terjadi selain aplikasi anda jalan dan langsung mati. Ketika anda menjalankannya JVM akan membuat sebuah thread baru dan secara default akan memanggil method run(), dalam hal ini run() kosong sehingga thread akan langsung mati. Berikut ini adalah cara memberikan tugas kepada thread : 1) meng-extends class Thread 2) meng-implements class Runnable Pemrograman Game Java 5

3) menggunakan innerclass tanpa nama 2.4.2 Meng-extends Class Thread Cara cepat memberikan tugas kepada thread adalah dengan mengoverride method run(). public class MyThread extends Thread { public void run(){ System.out.println( saya adalah thread ); Berikutnya yang perlu anda lakukan adalah membuat instance dari object Thread dan memanggil method start() sama seperti bahasan sebelumnya. Thread mythread = new MyThread(); mythread.start(); 2.4.3 Meng-implements Class Runnable meng-extends class Thread sangat mudah, tetapi mungkin anda tidak ingin menulis class baru setiap kali ingin menggunakan thread. Contoh nya anda mungkin sedang mengextends class JFrame dalam aplikasi GUI, dan ingin menggunakan thread, solusinya anda bisa menggunakan interface Runnable(). public class MyThread extends JFrame implements Runnable { public MyThread(){ Thread t=new Thread(this); t.start(); public void run(){ System.out.println( saya adalah thread ); Pemrograman Game Java 6

Dalam kode diatas MyThread membuat instance dari object thread pada konstruktor dengan object Runnable (dalam hal ini class MyThread sendiri), dan selanjutnya memulainya. 2.4.4 Menggunakan Inner Class Tanpa Nama Suatu saat mungkin anda ingin membuat sebuah thread tanpa harus membuat class baru ataupun mengimplements Runnable. Anda dapat melakukanya dengan dengan cara membuat inner class. new Thread() { public void run() { System.out.println("saya adalah Thread");.start(); Cara ini tidak lazim digunakan. Dapat anda bayangkan jika kode dalam method run() semakin besar. 2.4.5 Menggunakan sleep() Suatu saat anda perlu menghentikan sementara sebuah thread, untuk itu anda bisa menggunakan method sleep(). try{ Thread.sleep(1000); catch(exception e){ Kode diatas akan membuat thread anda berhenti selama 1 detik (1000 milidetik). Selama thread anda dalam kondisi sleep, thread anda tidak memerlukan kerja cpu. Kondisi sleep pada sebuah thread akan dimanfaatkan untuk menjalankan thread lainya. 2.4.6 Menghentikan Thread Pemrograman Game Java 7

Ada dua cara yang bisa anda lakukan untuk menghentikan sebuah thread. Pertama adalah menggunakan flag (tanda) dan yang kedua adalah menggunakan method interrupt(). Jika anda mempelajari thread anda mungkin bingung, mengapa tidak menggunakan method stop(). Ketika anda menggunakan method stop(), maka bersiap-siaplah melihat program anda tak terkendali atau bahkan mati. Method stop() mengakibatkan thread lain selain thread yang anda inginkan berhenti. 2.4.7 Menggunakan Flag(tanda) Cara yang paling banyak digunakan untuk menghentikan sebuah thread adalah menggunakan variabel penanda. Thread dapat memeriksa variabel tersebut secara berkala untuk memastikan kondisi berhenti. public class MyThread extends JFrame implements Runnable { private volatile boolean done=false; public MyThread(){ Thread t=new Thread(this); t.start(); public void run(){ while(!done){ System.out.println( saya adalah thread ); Public void setdone(){ done=true; Dengan kode diatas secara berkala thread akan memeriksa kondisi penanda, ketika penanda bernilai true maka thread tidak lagi dijalankan. Pemrograman Game Java 8

2.4.8 Menggunakan interupsi Cara lain yang dapat anda gunakan adalah dengan menginterrupsi sebuah thread. Cara ini biasa digunakan pada sistem blocking. Sistem blocking adalah sistem yang mem-block jalannya sistem sampai sebuah kunci di lepaskan. Contoh sistem blocking salah satunya pola penerimaan koneksi jaringan (pembahasan jaringan akan di jelaskan pada bab berikutnya). Pada teknik penghentian menggunakan flag, terdapat sebuah kondisi yang memungkinkan sistem kehilangan/terlambat menerima informasi. Contohnya ketika sebuah thread sedang memproses suatu perintah, tiba-tiba flag di set. Kondisi ini setidaknya membuat thread harus menyelesaikan proses tersebut dan baru akan menghentikan proses pada loop berikutnya. public class MyThread extends JFrame implements Runnable { private volatile boolean done=false; Thread t; public MyThread(){ t=new Thread(this); t.start(); public void run(){ while(!t.isinterrupted()){ System.out.println( saya adalah thread ); Dengan method interrupt(), thread akan di paksa berhenti dan mengabaikan proses yang sedang berjalan. Penggunaan method interrupt() dapat dengan mudah dilakukan dengan memanggil method tersebut. Pemrograman Game Java 9

2.4.9 Sinkronisasi data Apa yang terjadi ketika dua thread menggunakan variabel yang sama? Bisa saja salah satu thread mencoba mengkases data yang telah di hapus oleh thread lainya. Dalam hal ini kedua thread harus di sinkronisasi sehingga masing-masing thread tidak kehilangan informasi. Sinkronisasi berfungsi mengunci sebuah object, ketika sebuah object terkunci maka tidak ada yang bisa dilakukan terhadap object tersebut sebelum kunci di lepas. Anggaplah anda mempunyai dua buah thread yang mengakses variabel dari object yang sama. Suatu saat thread a mencoba mengambil data dalam variabel tersebut, sementara thread b mencoba mengubah data tersebut. public class GamePlayer { public int getlives() { return lives; public void setlives(int l) { lives = l; private int lives; Asumsikan kedua buah thread ingin mengakses object gameplayer yang sama. //Thread A int lives=gameplayer.getlives(); gameplayer.setlives(lives-1); //Thread B int lives=gameplayer.getlives(); gameplayer.setlives(lives-1); Kondisi yang diinginkan adalah variabel Lives mendapatkan pengurangan 2 kali. Namun ketika Thread A dan B mengakses variabel Lives dalam waktu yang Pemrograman Game Java 10

bersamaan kemudian menguranginya maka yang terjadi variabel Lives hanya akan mengalami satu pengurangan. Untuk memperbaiki kondisi tersebut kita bisa menggunakan kata kunci synchronized; //Thread A Synchronized(gamePlayer){ int lives=gameplayer.getlives(); gameplayer.setlives(lives-1); //Thread B Synchronized(gamePlayer){ int lives=gameplayer.getlives(); gameplayer.setlives(lives-1); 2.4.10 Menggunakan wait dan notify Sampai dengan saat ini anda telah mempelajari bagaimana thread bekerja secara mandiri. Pada kenyataan suatu saat anda perlu mengkomunikasikan dua atau lebih thread. Katakanlah anda mempunyai dua buah thread yang anda gunakan dalam komunikasi jaringan, thread A dan thread B. Thread A akan mengirimkan pesan manakala thread B selesai mengisi pesan. // Thread A public void waitformessage() { while (hasmessage == false) { Thread.sleep(100); // Thread B public void setmessage(string message) {... hasmessage = true; Pemrograman Game Java 11

Perhatikan kode diatas. Secara berkala thread A akan mengecek kondisi hasmessage. Jika hasmessage tidak di set pada pengecekan terkini maka berikutnya thread akan sleep selama 100 ms. Kode tersebut memang bekerja, tetapi apa yang terjadi jika hasmessage di set ketika Thread A dalam keadaan sleep? Thread A akan kehilangan atau setidaknya terlambat menerima informasi. Dengan method wait dan notify hal ini dapat di selesaikan. Thread a cukup menunggu sampai dengan thread B mengirimkan sinyal bahwa pesan telah siap. // Thread A public synchronized void waitformessage() { try { wait(); catch (InterruptedException ex) { // Thread B public synchronized void setmessage(string message) {... notify(); Seperti yang kita lihat diatas apabila method waitformessage() di panggil maka secara otomatis program akan berhenti secara mendadak untuk menunggu method setmessage() dipanggil atau dijalankan. Pemrograman Game Java 12