Ada dua cara untuk membuat thread di Java: menggunakan kelas Thread dan menggunakan antarmuka Runnable. Saat menggunakan antarmuka Runnable, Anda perlu membuat instance Thread. Oleh karena itu, baik Anda membuat thread melalui kelas Thread atau antarmuka Runnable, Anda harus membuat instance kelas Thread atau subkelasnya. Konstruktor kelas Thread telah kelebihan beban sebanyak delapan kali. Konstruktornya adalah sebagai berikut:
Sebuah instance dari kelas yang mengimplementasikan antarmuka Runnable. Perlu dicatat bahwa kelas Thread juga mengimplementasikan antarmuka Runnable, oleh karena itu, instance kelas yang diwarisi dari kelas Thread juga dapat diteruskan ke konstruktor ini sebagai target.
Nama tali
Nama utasnya. Nama ini dapat diatur melalui metode setName dari kelas Thread setelah membuat instance Thread. Jika nama thread tidak disetel, thread menggunakan nama thread default: Thread-N. N adalah urutan pembuatan thread dan merupakan bilangan bulat positif yang tidak berulang.
Grup Grup Utas
Grup thread tempat thread yang sedang dibuat berada. Jika tidak ada grup thread yang ditentukan, semua thread ditambahkan ke grup thread default. Detail tentang grup thread akan dibahas secara detail di bab selanjutnya.
ukuran tumpukan panjang
Ukuran tumpukan thread Nilai ini umumnya merupakan kelipatan bilangan bulat dari halaman CPU. Misalnya, ukuran halaman x86 adalah 4KB. Pada platform x86, ukuran tumpukan thread default adalah 12KB.
Kelas Java biasa bisa menjadi kelas thread asalkan mewarisi dari kelas Thread. Dan kode thread dapat dieksekusi melalui metode awal dari kelas Thread. Meskipun subkelas dari kelas Thread dapat dipakai secara langsung, metode run dari kelas Thread harus ditimpa di subkelas agar benar-benar menjalankan kode thread. Kode berikut memberikan contoh penggunaan kelas Thread untuk membuat thread:
kelas publik Thread1 memperluas Thread
{
menjalankan kekosongan publik()
{
Sistem.keluar.println(ini.getName());
}
public static void main(String[] args)
{
System.out.println(Thread.currentThread().getName());
Utas1 utas1 = Utas1 baru();
Thread1 thread2 = Thread1 baru();
thread1.mulai();
thread2.mulai();
}
}
Hasil dari menjalankan kode di atas adalah sebagai berikut:
Catatan: Setiap program Java harus memiliki thread utama. Secara umum, nama thread utama ini adalah main. Hanya dengan membuat thread lain dalam program tersebut, maka thread tersebut dapat dianggap sebagai program multi-thread yang sebenarnya. Dengan kata lain, program multi-threaded harus memiliki lebih dari satu thread.
Kelas Thread memiliki konstruktor kelebihan beban yang dapat mengatur nama thread. Selain menggunakan metode konstruktor untuk menyetel nama thread saat membuat thread, Anda juga dapat menggunakan metode setName dari kelas Thread untuk mengubah nama thread. Untuk menyetel nama thread melalui konstruktor kelas Thread, Anda harus menggunakan konstruktor Thread publik (nama String) dari kelas Thread di subkelas Thread. Oleh karena itu, Anda juga harus menambahkan thread untuk meneruskan subkelas Thread. Konstruktor nama. Kode berikut memberikan contoh pengaturan nama thread:
kelas publik Thread2 memperluas Thread
{
String pribadi siapa;
menjalankan kekosongan publik()
{
System.out.println(siapa + ":" + ini.getName());
}
Thread2 publik(String siapa)
{
super();
ini.siapa = siapa;
}
Thread2 publik (String siapa, Nama string)
{
super(nama);
ini.siapa = siapa;
}
public static void main(String[] args)
{
Thread2 thread1 = Thread2 baru ("thread1", "MyThread1");
Thread2 thread2 = Thread2 baru ("thread2");
Thread2 thread3 = Thread2 baru ("thread3");
thread2.setName("Benang Saya2");
thread1.mulai();
thread2.mulai();
thread3.mulai();
}
Baris 011: sampel publik2_2 (String siapa)
Konstruktor ini memiliki satu parameter: siapa. Parameter ini digunakan untuk mengidentifikasi thread yang sedang dibuat. Konstruktor default thread public Thread() masih dipanggil di konstruktor ini.
Baris 016: public sample2_2 (String siapa, nama String)
Who pada konstruktor ini memiliki arti yang sama dengan who pada konstruktor pertama, dan parameter name adalah nama thread. Dalam konstruktor ini, konstruktor Thread (nama String) publik dari kelas Thread dipanggil, yaitu super (nama) pada baris 018.
Tiga thread dibuat dalam metode utama: thread1, thread2 dan thread3. Diantaranya, thread1 menetapkan nama thread melalui metode konstruksi, thread2 mengubah nama thread melalui metode setName, dan thread3 tidak menetapkan nama thread.
Hasil yang berjalan adalah sebagai berikut:
Catatan: Anda dapat menggunakan setName untuk menyetel nama thread sebelum dan sesudah memanggil metode start. Namun, menggunakan setName untuk mengubah nama thread setelah memanggil metode start akan menyebabkan ketidakpastian, yang berarti setName tidak dapat dijalankan hingga metode run selesai. dieksekusi. Jika Jika ingin menggunakan nama thread pada metode run, akan terjadi fenomena meskipun metode setName dipanggil, namun nama thread tidak diubah.
Metode awal dari kelas Thread tidak dapat dipanggil berkali-kali. Misalnya, metode thread1.start() tidak dapat dipanggil dua kali. Jika tidak, IllegalThreadStateException akan dilempar.