Author Archives: bhimz

Demistifying Java Thread

Note: Karena beberapa hari ini kesibukan di kantor cukup tinggi, saya belum berkesempatan melanjutkan tutorial Blackberry Game Development kemarin (sorry about that again..). Sebagai gantinya, minggu ini saya akan mengeluarkan sebuah mini article lagi, hopefully minggu depan saya bisa meluangkan cukup waktu untuk melanjutkan tutorial kita kemarin. Kali ini kita akan membahas mengenai thread di Java: bukan mengenai membuat thread, namun lebih ke arah bagaimana kerjanya.

About Java Threads

Thread mungkin adalah salah satu tools (baca: class) yang sangat berguna dalam Java. Sebuah thread dapat digunakan untuk menjalankan sebuah code block di background, memungkinkan terjadinya multiple processing dalam Java. Ada 2 cara untuk membuat thread dalam Java:

  • Meng-extend class Thread;
  • Mengimplement interface Runnable.

Kedua cara di atas adalah benar, perbedaannya hanya jika kamu menggunakan interface Runnable, kamu perlu membuat method start dan stop sendiri sedang class Thread sudah menyediakan semua method yang diperlukan. Setelahnya, kamu hanya perlu meng-override method run dan mengisikan code yang ingin dijalankan di background.

Thread is not exactly “multiple processing”

Ini mungkin terdengar sedikit membingungkan, tapi multiple thread dalam Java tidak sepenuhnya dijalankan secara bersamaan. Pada kenyataannya, thread di Java dikontrol oleh metode yang kompleks yang disebut Thread Scheduling, di mana thread dijalankan blok-per-blok secara bergantian. Hanya saja, hal ini berlangsung dengan sangat cepat dan seamless, dan secara otomatis oleh system sehingga kita seringkali tidak menyadarinya.

Stages of a thread

Untuk memahami lifecycle dari sebuah thread, mari kita lihat berbagai state yang dialaminya:

1. Ready to run

Ini adalah posisi awal dari thread, tepat pada saat method start() dipanggil. Pada saat ini, thread tidak langsung dijalankan, namun dia didaftarkan ke dalam thread pool. Nantinya, thread scheduler akan melihat ke dalam pool dan memilih thread mana yang akan dijalankan berdasarkan thread priority.

2. Running

Thread tengah dijalankan oleh system. Sebuah thread akan terus berjalan kecuali di atas kondisi ini: system menukarnya secara otomatis, atau thread berada dalam kondisi blocked. Kita juga dapat memaksa thread yang tengah berjalan untuk diswap dengan memakai method Thread.yield().

3. Waiting

Thread memasuki posisi waiting bila method wait() dipanggil. Pada posisi ini, thread akan berhenti dan menunggu giliran hingga thread lain memanggil method notify() atau notifyAll() terhadapnya. Method ini dimiliki oleh semua object Java.

4. Sleeping

Thread akan memasuki posisi sleeping bila di method sleep() dipanggil. Pada posisi ini, thread akan berhenti eksekusinya hingga sejumlah waktu terlampaui. Setelah itu, thread akan kembali ke posisi ready to run.

5. Blocked

Thread akan masuk ke posisi blocked bila 1 dari 2 hal: Pertama, thread sedang menunggu proses I/O, seperti sedang membaca byte dari socket, atau thread sedang berusaha mengakses synchronized method. Proses akan dilanjutkan setelah data diterima, atau thread mendapatkan lock atas synchronized method tersebut.

6. Dead

Bila thread telah selesai mengeksekusi seluruh block atau menerima panggilan atas method stop(). Pada posisi ini, object thread akan dikeluarkan dari pool dan tidak bisa dieksekusi lagi. Untuk dapat mengeksekusi ulang, kita harus kembali membuat object-nya dan memanggil method start().

Multithreading in a mobile device

Pada mobile device, khususnya J2ME yang umumnya memiliki resource dan prosessor yang lebih kecil penggunaan multiple thread sebaiknya dikurangi karena cukup resource consuming. Bila memungkinkan, gunakan thread-thread yang waktu eksekusinya pendek sehingga tidak terlalu banyak thread yang berjalan bersamaan dan cukup satu thread utama yang terus aktif; atau kita bisa membuat sebuah thread manager class yang memantain thread-thread yang berjalan supaya lebih efektif. Namun kita akan membahas thread manager di lain kesempatan. Sekian untuk saat ini, dan semoga artikel ini cukup membantu rekan-rekan lebih memahami thread dalam Java ;) .

 

bhimz

BhimZ adalah seorang Mobile Development Manager di salah satu perusahaan swasta di Jakarta, membantu mengembangkan berbagai macam aplikasi mobile khususnya untuk platform smartphone. Bersama rekan-rekannya sesama hobbyist, BhimZ juga membentuk Pokkon Studio sebagai project after office dan memulai mengembangkan beberapa game baik web-based maupun mobile, beberapa di antaranya sedang dirilis untuk Blackberry AppWorld dan Android Market.

State Settings Dengan Bitwise Operation

Ok, a little confession.. I know minggu ini saya seharusnya melanjutkan bagian 3 dari seri  Blackberry Game Development Tutorial, hanya saja minggu ini saya masih relatif sibuk sehingga belum sempat menyelesaikan artikelnya (itu, dan karena ngejar ngabisin nonton The Big Bang Theory season 2 :P ). So instead, untuk minggu ini saya akan menulis mini-article tentang bitwise state setting sebagai gantinya. Teori ini sebenarnya bisa diaplikasikan ke berbagai macam programming language, namun karena Java adalah bahasa yang paling saya kuasai, maka sample-sample yang saya berikan akan saya tulis dengan Java juga. Okay, on to the topic..

Asumsikan kita dihadapkan pada problem berikut: Kita akan membuat sebuah game rock-paper-scissors. Pada model yang sederhana, rule-nya adalah sebagai berikut:

  • Rock beats scissors
  • Scissors beats paper
  • Paper beats rock
Untuk kasus ini, kita bisa membuat method sederhana untuk mengecek pemenang:
private static final int ROCK = 1;
private static final int PAPER = 2;
private static final int SCISSORS = 3;

public String checkWin(int myHand, int enemyHand) {
   //bila sama, maka seri
   if (enemyHand == myHand)
       return "It's a Tie!";
    switch(myHand) {
       case PAPER:
          if (enemyHand == ROCK)
              return "You Win!";
          break;
       case ROCK:
          if (enemyHand == SCISSORS)
              return "You Win!";
          break;
       case SCISSORS:
          if (enemyHand == PAPER)
              return "You Win!";
          break;
    }

    //pemain kalah
   return "You Lose!"
}

Namun bagaimana bila melakukan perhitungan yang lebih kompleks, seperti perbandingan elemen? Katakanlah kita memiliki sebuah kasus sbb: kita ingin membuat game seperti rock-paper-scissors, namun ketimbang menggunakan gunting, batu dan kertas kita ingin membuatnya lebih kompleks dengan menggunakan elemen-elemen seperti air, api dan tanah sebagai pembandingnya. Rule-nya adalah sebagai berikut:

  • Water defeats Fire
  • Fire defeats earth
  • Earth defeats Water
  • Wind defeats Earth and Fire, but loses to Water
  • Thunder defeats Earth, Wind and Water, but loses to Fire
(Note: bukan contoh yang paling realistis memang, but please bear with me :P )
Untuk kasus ini, kita bisa menyelesaikannya dengan menggunakan beberapa if-then-else statement, namun kita bisa membuatnya lebih sederhana dengan menggunakan bitwise operation. Sebelumnya, mari kita bahas beberapa bitwise operation yang bisa kita gunakan.

bhimz

BhimZ adalah seorang Mobile Development Manager di salah satu perusahaan swasta di Jakarta, membantu mengembangkan berbagai macam aplikasi mobile khususnya untuk platform smartphone. Bersama rekan-rekannya sesama hobbyist, BhimZ juga membentuk Pokkon Studio sebagai project after office dan memulai mengembangkan beberapa game baik web-based maupun mobile, beberapa di antaranya sedang dirilis untuk Blackberry AppWorld dan Android Market.

Blackberry Game Development, Part II: Your First Blackberry Project

Hi all and welcome to part 2 of my Blackberry Game Development Tutorial. Buat kamu yang mengikuti bagian pertama (buat kamu yang belum, bisa dilihat di sini), kita sudah membahas mengenai bagaimana mensetup Eclipse dan environment. Selanjutnya kita akan membahas bagaimana membuat sebuah Blackberry app.

Read more …

bhimz

BhimZ adalah seorang Mobile Development Manager di salah satu perusahaan swasta di Jakarta, membantu mengembangkan berbagai macam aplikasi mobile khususnya untuk platform smartphone. Bersama rekan-rekannya sesama hobbyist, BhimZ juga membentuk Pokkon Studio sebagai project after office dan memulai mengembangkan beberapa game baik web-based maupun mobile, beberapa di antaranya sedang dirilis untuk Blackberry AppWorld dan Android Market.

Blackberry Game Development, Part I: Getting Started

Hi, my name is Bima (aka BhimZ) and this is my first post in IDdevblogaday. Pada kesempatan ini kita akan membahas sedikit mengenai game development di Blackberry device, step by step dan apa saja yang diperlukan. Saya akan mencoba menyajikan pembahasan ini dalam bentuk tutorial, namun karena agak panjang, tutorial ini akan saya bagi menjadi beberapa bagian. Pada bagian pertama ini, kita akan berbicara sedikit tentang latar belakang dan setting environment.

Background

Bagi anda yang belum tahu (can’t imagine you haven’t though), Blackberry adalah smartphone device besutan Research In Motion Canada alias RIM. Pada awalnya, device ini lebih ditargetkan kepada para pengguna bisnis dan enterprise seperti orang-orang kantoran, namun belakangan device ini banyak juga diminati kalangan biasa non-bisnis seperti pengguna rumahan atau pelajar. Umumnya, pengguna Blakberry tertarik dengan fitur push dan chat-nya, apalagi di saat booming social network seperti Facebook dan Twitter.

Read more …

bhimz

BhimZ adalah seorang Mobile Development Manager di salah satu perusahaan swasta di Jakarta, membantu mengembangkan berbagai macam aplikasi mobile khususnya untuk platform smartphone. Bersama rekan-rekannya sesama hobbyist, BhimZ juga membentuk Pokkon Studio sebagai project after office dan memulai mengembangkan beberapa game baik web-based maupun mobile, beberapa di antaranya sedang dirilis untuk Blackberry AppWorld dan Android Market.

Stop SOPA