Ada dua cara untuk membuat utas di Java, yaitu mewarisi kelas utas dan menerapkan antarmuka yang dapat dijalankan.
Waris utas
kelas publik mythread memperluas utas {public mythread (nama string) {super (name); } int i; public void run () {for (i = 0; i <5; i ++) {System.out.println (getName ()+"-"+i); }} public static void main (string [] agrs) {new mythread ("thread1"). start (); baru mythread ("thread2"). start (); }} /*Thread 1-0Thread 1-1thread 1-2thread 1-3Thread 1-4Thread 2-0Thread 2-1Thread 2-2Thread 2-3Thread 2-4* /Seperti disebutkan di atas, objek utas di Java harus dibuat dalam bentuk kelas, dan metode run () dari kelas dasar harus ditimpa di kelas ini. Metode ini sebenarnya adalah badan eksekusi utas. Memanggil metode start dari instance kelas ini secara implisit memanggil metode run.
Tidak sulit untuk melihat bahwa karena MyThread adalah baru dua kali, contoh dari dua kali berbeda, yaitu, masing -masing memiliki variabel I sendiri, yang tidak tergantung satu sama lain.
Antarmuka runnable
kelas publik MyRunnable mengimplementasikan runnable {int i; public void run(){ for(i=0;i<50;i++){ System.out.println(Thread.currentThread().getName()+"--"+i);//This.getName() cannot be directly used } } public static void main(String[] agrs){ MyRunnable myRun=new MyRunnable(); utas baru (myrun, "thread1"). start (); utas baru (myrun, "thread2"). start (); }} /*Thread 1-0Thread 1-1Thread 2-0Thread 2-3Thread 2-4Thread 2-5Thread 2-6Thread 2-7Thread 2-8 Thread 2-9th Thread 2-15 Thread 2-21 Thread 2-21 Thread 2-2-2-2th Thread 2-2-2-2th Thread 2-2-2-2th Thread 2-2TH 2-12th Thread 2-2-2-2th Thread 2-2TH 2-12th Thread 2-2TH 2-14 2-22th Thread 2-23th Thread 2-24th Thread 1-17th Thread 2--25 Threads 1--26 Threads 2--27 Threads 1--28 Threads 1--30 Threads 2--29 Threads 1--31 Threads 2--32 Threads 2--34 Threads 2--35 Threads 2--36 Threads 2--37 Threads 1--34 Threads 2--38 Threads 2--36 Threads 2--37 Threads 1--34 Threads 2--38 Threads 1-38 Threads 2--36 Threads 2--34 Threads 2--34 Threads 2--34 Threads 2--34 Threads 2-2-- 2--40 Threads 1--42 Threads 1--44 Threads 1--45 Threads 2--43 Threads 1--46 Threads 2--47 Threads 2--49 Threads 1--48*/Dapat dilihat bahwa karena metode ini adalah memuat objek ke dalam kelas utas sebagai target, bahkan jika ada banyak objek utas yang baru, selama target adalah objek referensi yang sama, metode run objek dipanggil, dan semua utas berbagi sumber daya objek target. Oleh karena itu, Anda akan melihat bahwa output Thread 1 dan Thread 2 Total 51 kali, dan kedua utas telah menyelesaikan output dari I dari 0 hingga 49, dan tidak menghasilkan masing -masing 5 kali seperti di atas. Adapun mengapa 51 adalah output, kedua utas memasuki keadaan siap hampir pada saat yang sama (metode awal hanya memungkinkan utas masuk ke keadaan siap), tidak sulit untuk menemukan bahwa ketika saya sama dengan 0, Thread 1 dan Thread 2 keduanya dalam keadaan berjalan pada saat yang sama, menghasilkan fenomena konkurensi, dan output dari I = 0 bersama -sama. Setelah itu, CPU terus -menerus mengganti utas, sehingga hanya satu utas yang output pada saat yang sama.
Status utas
Benang dibagi menjadi 4 negara bagian
Status Siap: Hubungi metode start dan masukkan keadaan siap.
Status berjalan: utas dalam keadaan siap akan dijadwalkan oleh JVM dan menjadi status berjalan.
Keadaan pemblokiran: Jika beberapa metode sinkronisasi tidak mengembalikan hasil, keadaan pemblokiran terjadi, atau tidur dan yeild.
Status Kematian: Badan Metode dieksekusi atau utas dipaksa untuk berhenti.
Operasi dasar utas
gabungan () gabungan utas: Setelah utas saat ini memanggil metode gabungan utas, itu akan menunggu utas untuk menyelesaikan eksekusi sebelum utas akan berlanjut.
Sleep (long milidonds) Thread Sleep: Blokir utas saat ini, dan itu akan berlanjut hanya ketika waktu pemblokiran habis. Saat memblokir lagi, kepemilikan CPU akan diserahkan ke utas lain, jadi tidur (1) sering digunakan untuk mengganti utas.
** Hasil () Konsesi Thread: ** Yeild mirip dengan tidur, tetapi hanya akan konsesi ke utas lain di tingkat yang lebih tinggi atau pada tingkat yang sama. Jika tidak ada utas lain yang lebih rendah dari levelnya, utas akan dieksekusi lagi.
Utas latar belakang
Setelah program dieksekusi oleh sistem operasi, akan ada proses, dan suatu proses memiliki setidaknya satu utas (utas utama). Utas utama tidak memiliki banyak fitur khusus daripada utas lain, hanya karena itu adalah utas paling awal yang akan dieksekusi, utas lain akan dibuat di utas utama. Jika tidak ditentukan, utas latar depan (termasuk utas utama) dibuat secara default. Jika setdaemon (true) dipanggil, utas secara eksplisit ditetapkan sebagai utas latar belakang. Utas latar belakang adalah utas daemon. Seperti yang dapat Anda lihat dari namanya, fungsi utamanya adalah menyediakan fungsi wali dan layanan untuk utas lain. Ketika semua utas latar depan berakhir, utas latar belakang akan dipaksa untuk berakhir karena tidak ada artinya ada saat ini.
Utas latar depan
Public Class FaydBackThread memperluas utas {public faydbackThread (name string) {super (name); } public void run () {int i; untuk (i = 0; i <9999; i ++) {System.out.println (this.getName ()+"-"+i); }} public static void main (string [] args) {foreandbackThread th = new FaydBackThread ("Thread a"); //th.setdaemon(true); th.start (); int j; untuk (j = 0; j <3; j ++) {System.out.println (thread.currentThread (). getName ()+"-"+j); }}}Utas anak output lengkap dari program ini adalah 0 hingga 9998; Ini berarti bahwa utas utama tidak istimewa, dan akhirnya tidak akan mempengaruhi pengoperasian utas latar depan lainnya.
Utas latar belakang
Public Class FaydBackThread memperluas utas {public faydbackThread (name string) {super (name); } public void run () {int i; untuk (i = 0; i <9999; i ++) {System.out.println (this.getName ()+"-"+i); }} public static void main (string [] args) {foreandbackThread th = new FaydBackThread ("Thread a"); th.setdaemon (true); th.start (); int j; untuk (j = 0; j <3; j ++) {System.out.println (thread.currentThread (). getName ()+"-"+j); }}}Program tidak dapat menghasilkan 0-9998 secara penuh dan keluar, menunjukkan bahwa setelah utas utama ujung latar depan, JVM memaksa utas latar belakang untuk berakhir.
Meringkaskan
Di atas adalah semua tentang analisis contoh dasar utas Java dalam artikel ini, saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!