Difference between revisions of "JAVA: Perbedaan antara Thread.start() dan Thread.run()"

From OnnoWiki
Jump to navigation Jump to search
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
In Java’s multi-threading concept, start() and run() are the two most important methods. Below are some of the differences between the Thread.start() and Thread.run() methods:
+
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():
  
==New Thread creation:==
 
  
When a program calls the start() method, a new thread is created and then the run() method is executed. But if we directly call the run() method then no new thread will be created and run() method will be executed as a normal method call on the current calling thread itself and no multi-threading will take place.
+
==Pembuatan New Thread:==
Let us understand it with an example:
+
 
 +
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 {
 
  class MyThread extends Thread {
Line 27: Line 30:
 
  run() method called
 
  run() method called
  
As we can see in the above example, when we call the start() method of our thread class instance, a new thread is created with default name Thread-0 and then run() method is called and everything inside it is executed on the newly created thread.
+
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():
  
Now, let us try to call run() method directly instead of start() method:
 
  
 
  class MyThread extends Thread {
 
  class MyThread extends Thread {
Line 53: Line 57:
 
  run() method called
 
  run() method called
  
As we can see in the above example, when we called the run() method of our MyThread class, no new thread is created and the run() method is executed on the current thread i.e. main thread. Hence, no multi-threading took place. The run() method is called as a normal function call.
+
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.
  
==Multiple invocation:==
+
Mari kita pahami dengan sebuah contoh:
  
In Java’s multi-threading concept, another most important difference between start() and run() method is that we can’t call the start() method twice otherwise it will throw an IllegalStateException whereas run() method can be called multiple times as it is just a normal method calling.
 
  
Let us understand it with an example:
 
  
 
  class MyThread extends Thread {
 
  class MyThread extends Thread {
Line 88: Line 95:
 
     at GeeksforGeeks.main(File.java:11)
 
     at GeeksforGeeks.main(File.java:11)
  
As we can see in the above example, calling start() method again raises java.lang.IllegalThreadStateException.
+
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:
  
Now, let us try to call run() method twice:
 
  
  
Line 117: Line 125:
 
  run() method called
 
  run() method called
  
As we can see in the above example, calling run() method twice doesn’t raise any exception and it is executed twice as expected but on the main thread itself.
+
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.
  
Summary
 
start() run()
 
Creates a new thread and the run() method is executed on the newly created thread. No new thread is created and the run() method is executed on the calling thread itself.
 
Can’t be invoked more than one time otherwise throws java.lang.IllegalStateException Multiple invocation is possible
 
Defined in java.lang.Thread class. Defined in java.lang.Runnable interface and must be overriden in the implementing class.
 
  
 +
{| class="wikitable"
 +
|+ Summary
 +
|-
 +
! 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.


Summary
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