Thread
Thread adalah rangkaian eksekusi dari sebuah aplikasi java dan setiap program java minimal memiliki satu buah thread. Sebuah thread bisa berada di salah satu dari 4 status, yaitu new, runnable, blocked, dan dead.
Status Thread
• New, Thread yang berada di status ini adalah objek dari kelas Thread yang baru dibuat, yaitu saat instansiasi objek dengan statement new. Saat thread berada di status new,belum ada sumber daya yang dialokasikan, sehingga thread belum bisa menjalankan perintah apapun.
• Runnable. Agar thread bisa menjalankan tugasnya, method start() dari kelas Thread harus dipanggil. Ada dua hal yang terjadi saat pemanggilan method start(), yaitu alokasi memori untuk thread yang dibuat dan pemanggilan method run(). Saat method run() dipanggil, status thread berubah menjadi runnable, artinya thread tersebut sudah memenuhi syarat untuk dijalankan oleh JVM. Thread yang sedang berjalan juga berada di status runnable.
• Blocked. Sebuah thread dikatakan berstatus blocked atau terhalang jika terjadi blocking statement, misalnya pemanggilan method sleep(). sleep() adalah suatu method yang menerima argumen bertipe integer dalam bentuk milisekon. Argumen tersebut menunjukkan seberapa lama thread akan “tidur”. Selain sleep(), dulunya dikenal method suspend(), tetapi sudah disarankan untuk tidak digunakan lagi karena mengakibatkan terjadinya deadlock. Thread akan menjadi runnable kembali jika interval method sleep()-nya sudah berakhir, atau pemanggilan method resume() jika untuk menghalangi thread tadi digunakan method suspend()
• Dead. Sebuah thread berada di status dead bila telah keluar dari method run(). Hal ini bisa terjadi karena thread tersebut memang telah menyelesaikan pekerjaannya di method run(), maupun karena adanya pembatalan thread. Status jelas dari sebuah thread tidak dapat diketahui, tetapi method isAlive() mengembalikan nilai boolean untuk mengetahui apakah thread tersebut dead atau tidak.
Pembentukan Thread dalam java
Untuk membuat thread dalam java terdapat dua cara ( sejauh yang saya tahu
)
• Extends class Thread
Untuk menjalankan thread, dapat dilakukan dengan memanggil method start(). Saat start() dijalankan, maka sebenarnya method run() dari class akan dijalankan. Jadi untuk membuat thread, harus mendefinisikan method run() pada definisi class. Konstruktor dari cara ini adalah :
SubThread namaObject = new SubThread();
namaObject.start();
• Implements interface Runnable
Cara ini merupakan cara yang paling sederhana dalam membuat thread. Runnable merupakan unit abstrak, yaitu kelas yang mengimplementasikan interface ini hanya cukup mengimplementasikan fungsi run(). Dalam mengimplementasi fungsi run(), kita akan mendefinisikan instruksi yang membangun sebuah thread. Konstruktor dari cara ini adalah :
MyThread myObject= new MyThread();
Thread namaObject = new Thread(myObject);
Atau dengan cara singkat seperti :
New Thread(new ObjekRunnable());
MyThread merupakan class yang mengimplementasikan interface dari Runnable, dan object dari class MyThread akan menjadi parameter instansi object class Thread.
Synchronized
Sinkronisasi adalah method atau blok yang memiliki tambahan keyword synchronized,sehingga apabila dijalankan maka hanya satu thread pada suatu waktu yang dapat menjalankan method atau blok program. Thread lain akan menunggu thread yang sedang mengeksekusi method ini hingga selesai. Mekanisme sinkronisasi penting apabila terjadi pembagian sumber daya maupun data di antara thread-thread. Sinkronisasi juga melakukan penguncian pada sumber daya atau data yang sedang diproses.
Sinkronisasi dapat dilakukan pada dua bagian yaitu
- Sinkronisasi Blok
Sintak untuk sinkronisasi blok adalah sebagai berikut :
synchronized (<object reference expression>) {
<code block>
}
<code block>
}
- Sinkronisasi Method
Sintak untuk sinkronisasi method adalah sebagai berikut:
synchronized TypeBalikanMethod NamaMethod ( parameter)
{
}
Prioritas Thread
Dalam Java kita dapat membuat prioritas suatu thread relative terhadapa thread yang lain. Sehingga thread yang mempunyai prioritas lebih tinggi mempunyai kesempatan lebih besar untuk mengakses suatu sources
Java Virtual Machine memilih thread yang runnable dengan prioritas tertinggi. Semua thread java mempunyai prioritas dari 1 sampai 10. Prioritas tertinggi 10 dan berakhir dengan 1 sebagai prioritas terendah. Sedangkan prioritas normal adalah 5.
Thread.MIN_PRIORITY = thread dengan prioritas terendah.
Thread.MAX_PRIORITY = thread dengan prioritas tertinggi.
Thread.NORM_PRIORITY = thread dengan prioritas normal.
Saat thread baru dibuat ia mempunyai prioritas yang sama dengan thread yang menciptakannya. Prioritas thread dapat diubah dengan menggunakan setpriority() method.
contoh kodingan :
thread.java
import java.io.DataOutputStream; import java.net.InetAddress; import java.net.Socket; /** * Created by DELL on 17/05/2017. * PERTEMUAN 8 SEBENERNYA */public class Threading implements Runnable { private int n=1; @Override public void run() { while (true){ System.out.println(n++); try { Thread.sleep(500); //penjedaan } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String args[]){ Thread t = new Thread( new Threading() ); t.start(); while (true){ System.out.println("Tes"); try { Thread.sleep(600); } catch (InterruptedException e) { e.printStackTrace(); } } } }
Saat di RUN
Socket
Sebuah socket merupakan IP Port pada sebuah host mesin yang spesifik. Socket adalah sebuah konsep yang telah berkembang pada paradigma bahasa pemrograman untuk beberapa waktu. Socket pertama kali digunakan pada sistem Unix pada tahun 1970-an dan sekarang socket merupakan standar low-level komunikasi primitif. Sebenarnya ada dua jenis socket, yaitu connection-oriented socket, yang termasuk dalam TCP (Transport Control Protocol), dan connectionless socket, yang berdasar pada UDP (User Datagram Protocol). Jika dianalogikan, komunikasi socket merupakan komunikasi dua arah antar komputer dengan jalur pipa sebagai penghubungnya dan masing-masing pipa tersebut “tertancap” pada sebuah gerbang tertentu yang dinamakan port. Lifetime sebuah socket terdiri atas 3 fase :
a. Creation : inisilisasi untuk membuat sebuah socket
b. Reading and Writing : menerima dan mengirim ke sebuah socket
c. Destruction : menutup/mengakhiri socket
Java menyediakan utilitas yang lengkap untuk pemrograman network yang dibundel dalam package java.net.* dan javax.net.*. Java menyediakan dua buah tipe socket yang berbeda dan sebuah socket spesial untuk berkomunikasi antar node yaitu:
a. TCP sockets (connection -oriented socket) yang diimplementasikan pada kelas java.net.Socket.
b. UDP sockets (connection -less socket) yang diimplentasikan oleh kelas java.net.DatagramSocket.
a. Creation : inisilisasi untuk membuat sebuah socket
b. Reading and Writing : menerima dan mengirim ke sebuah socket
c. Destruction : menutup/mengakhiri socket
Java menyediakan utilitas yang lengkap untuk pemrograman network yang dibundel dalam package java.net.* dan javax.net.*. Java menyediakan dua buah tipe socket yang berbeda dan sebuah socket spesial untuk berkomunikasi antar node yaitu:
a. TCP sockets (connection -oriented socket) yang diimplementasikan pada kelas java.net.Socket.
b. UDP sockets (connection -less socket) yang diimplentasikan oleh kelas java.net.DatagramSocket.
Socket.java
import java.io.DataOutputStream; import java.io.IOException; import java.net.InetAddress; /** * Created by DELL on 17/05/2017. */public class Socket { public static void main (String args[]) throws IOException { java.net.Socket socket = new java.net.Socket( InetAddress.getLoopbackAddress(), 3000 ); DataOutputStream sendStream = new DataOutputStream(socket.getOutputStream()); sendStream.writeBytes("Helloo"); socket.close();} }
ServerSocket.java
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.InetAddress; /** * Created by DELL on 17/05/2017. */public class ServerSocket { public ServerSocket(InetAddress loopbackAddress, int i) { } public static void main(String args[]) throws IOException { java.net.ServerSocket server = new java.net.ServerSocket( 3000,0, InetAddress.getLoopbackAddress() ); java.net.Socket request = server.accept(); BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream())); String temp; while((temp = reader.readLine())!=null){ System.out.println(temp);} request.close(); } }
Tidak ada komentar:
Posting Komentar