JAVA: Perbedaan antara Thread.start() dan Thread.run()

From OnnoWiki
Jump to navigation Jump to search

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