Difference between revisions of "JAVA: Perbedaan antara Thread.start() dan Thread.run()"
Onnowpurbo (talk | contribs) |
Onnowpurbo (talk | contribs) |
||
(2 intermediate revisions by the same user not shown) | |||
Line 60: | Line 60: | ||
− | ==Multiple invocation:== | + | ==Multiple invocation/panggilan:== |
− | + | Dalam konsep multi-threading Java, perbedaan terpenting lainnya antara method start() dan run() adalah bahwa kita tidak dapat memanggil method start() dua kali jika tidak, metode ini akan mengeluarkan IllegalStateException sedangkan method run() dapat dipanggil beberapa kali sebagai itu hanya pemanggilan method biasa. | |
− | |||
− | |||
− | |||
− | Dalam konsep multi-threading Java, perbedaan terpenting lainnya antara | ||
Mari kita pahami dengan sebuah contoh: | Mari kita pahami dengan sebuah contoh: | ||
Line 99: | Line 95: | ||
at GeeksforGeeks.main(File.java:11) | at GeeksforGeeks.main(File.java:11) | ||
− | + | Seperti yang dapat kita lihat pada contoh di atas, memanggil method start() kembali memunculkan java.lang.IllegalThreadStateException. | |
− | |||
− | |||
− | |||
− | Seperti yang dapat kita lihat pada contoh di atas, memanggil | ||
Sekarang, mari kita coba memanggil metode run() dua kali: | Sekarang, mari kita coba memanggil metode run() dua kali: | ||
Line 133: | Line 125: | ||
run() method called | run() method called | ||
− | + | Seperti yang dapat kita lihat pada contoh di atas, memanggil method run() dua kali tidak menimbulkan exception apa pun dan dijalankan dua kali seperti yang diharapkan tetapi pada main thread itu sendiri. | |
− | |||
− | |||
− | |||
Line 144: | Line 133: | ||
! start() !! run() | ! start() !! run() | ||
|- | |- | ||
− | | | + | | Membuat thread baru dan method run() dijalankan pada thread yang baru dibuat. || Tidak ada thread baru yang dibuat dan method run() dijalankan pada thread panggilan itu sendiri. |
|- | |- | ||
− | | | + | | Tidak dapat dipanggil lebih dari satu kali jika tidak, akan memunculkan java.lang.IllegalStateException || Dimungkinkan di panggilan beberapa kali |
|- | |- | ||
− | | | + | | Didefinisikan dalam Class java.lang.Thread. || Didefinisikan dalam interface java.lang.Runnable dan harus diganti di Class implementasi. |
|} | |} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==Referensi== | ==Referensi== | ||
* https://www.geeksforgeeks.org/difference-between-thread-start-and-thread-run-in-java/ | * https://www.geeksforgeeks.org/difference-between-thread-start-and-thread-run-in-java/ |
Latest revision as of 15:17, 18 May 2022
Dalam konsep multi-threading Java, start() dan run() adalah dua method yang paling penting. Berikut adalah beberapa perbedaan antara metode Thread.start() dan Thread.run():
Pembuatan New Thread:
Ketika sebuah program memanggil method start(), sebuah thread baru dibuat dan kemudian method run() dijalankan. Tetapi jika kita secara langsung memanggil method run() maka tidak ada thread baru yang akan dibuat dan method run() akan dieksekusi sebagai pemanggilan method normal pada thread panggilan saat ini itu sendiri dan tidak ada multi-threading yang akan terjadi.
Mari kita pahami dengan sebuah contoh:
class MyThread extends Thread { public void run() { System.out.println("Current thread name: " + Thread.currentThread().getName()); System.out.println("run() method called"); } } class GeeksforGeeks { public static void main(String[] args) { MyThread t = new MyThread(); t.start(); } }
Output:
Current thread name: Thread-0 run() method called
Seperti yang dapat kita lihat pada contoh di atas, ketika kita memanggil method start() dari instance class thread kita, thread baru dibuat dengan nama default Thread-0 dan kemudian method run() dipanggil dan semua yang ada di dalamnya dieksekusi pada thread yang baru dibuat.
Sekarang, mari kita coba memanggil method run() secara langsung bukan method start():
class MyThread extends Thread { public void run() { System.out.println("Current thread name: " + Thread.currentThread().getName()); System.out.println("run() method called"); } } class GeeksforGeeks { public static void main(String[] args) { MyThread t = new MyThread(); t.run(); } }
Output:
Current thread name: main run() method called
Seperti yang dapat kita lihat pada contoh di atas, ketika kita memanggil method run() dari class MyThread kita, tidak ada thread baru yang dibuat dan method run() dijalankan pada thread saat ini, yaitu main thread. Oleh karena itu, tidak ada multi-threading yang terjadi. Metode run() dipanggil sebagai pemanggilan fungsi normal.
Multiple invocation/panggilan:
Dalam konsep multi-threading Java, perbedaan terpenting lainnya antara method start() dan run() adalah bahwa kita tidak dapat memanggil method start() dua kali jika tidak, metode ini akan mengeluarkan IllegalStateException sedangkan method run() dapat dipanggil beberapa kali sebagai itu hanya pemanggilan method biasa.
Mari kita pahami dengan sebuah contoh:
class MyThread extends Thread { public void run() { System.out.println("Current thread name: " + Thread.currentThread().getName()); System.out.println("run() method called"); } } class GeeksforGeeks { public static void main(String[] args) { MyThread t = new MyThread(); t.start(); t.start(); } }
Output:
Current thread name: Thread-0 run() method called Exception in thread "main" java.lang.IllegalThreadStateException at java.lang.Thread.start(Thread.java:708) at GeeksforGeeks.main(File.java:11)
Seperti yang dapat kita lihat pada contoh di atas, memanggil method start() kembali memunculkan java.lang.IllegalThreadStateException.
Sekarang, mari kita coba memanggil metode run() dua kali:
class MyThread extends Thread { public void run() { System.out.println("Current thread name: " + Thread.currentThread().getName()); System.out.println("run() method called"); } } class GeeksforGeeks { public static void main(String[] args) { MyThread t = new MyThread(); t.run(); t.run(); } }
Output:
Current thread name: main run() method called Current thread name: main run() method called
Seperti yang dapat kita lihat pada contoh di atas, memanggil method run() dua kali tidak menimbulkan exception apa pun dan dijalankan dua kali seperti yang diharapkan tetapi pada main thread itu sendiri.
start() | run() |
---|---|
Membuat thread baru dan method run() dijalankan pada thread yang baru dibuat. | Tidak ada thread baru yang dibuat dan method run() dijalankan pada thread panggilan itu sendiri. |
Tidak dapat dipanggil lebih dari satu kali jika tidak, akan memunculkan java.lang.IllegalStateException | Dimungkinkan di panggilan beberapa kali |
Didefinisikan dalam Class java.lang.Thread. | Didefinisikan dalam interface java.lang.Runnable dan harus diganti di Class implementasi. |