Rumah >Java >javaTutorial >Bolehkah Berbilang Benang Antara Keluaran Apabila Menggunakan System.out.println()?
Dalam Java, kelas System.out menyediakan kaedah println untuk mencetak mesej ke konsol. Walau bagaimanapun, terdapat beberapa kesamaran mengenai sama ada output daripada berbilang benang yang memanggil kaedah ini boleh disilang.
Dokumentasi Java API untuk System.out tidak menyatakan secara eksplisit sama ada ia adalah thread- selamat atau tidak. Oleh itu, tidak boleh diandaikan bahawa output daripada berbilang benang akan konsisten.
Secara teorinya, output daripada berbilang thread boleh dijalinkan. Ini boleh berlaku jika pelaksanaan asas Mesin Maya Java (JVM) tidak memastikan operasi tulis atom untuk System.out.println. Dalam kes sedemikian, output boleh menjadi bercelaru, dengan aksara daripada mesej berbeza kelihatan berselang-seli.
Sebagai contoh, pertimbangkan kod berikut:
Thread thread1 = new Thread(() -> System.out.println("ABC")); Thread thread2 = new Thread(() -> System.out.println("ABC")); thread1.start(); thread2.start();
Dalam contoh ini, adalah mungkin (tetapi tidak dijamin) bahawa output boleh kelihatan berjalin, sebagai berikut:
AABC BC
Dalam amalan, gelagat sebenar mungkin bergantung pada pelaksanaan JVM tertentu. Sesetengah JVM mungkin mengoptimumkan kelas System.out untuk memastikan operasi penulisan atom, menghalang interleaving. Walau bagaimanapun, ini tidak dijamin merentas semua platform dan pelaksanaan.
Untuk memastikan bahawa output daripada berbilang urutan tidak disilang, anda boleh menguatkuasakan pengecualian bersama secara manual menggunakan kata kunci yang disegerakkan. Contohnya:
public synchronized void safePrintln(String s) { System.out.println(s); }
Dengan melindungi objek System.out dengan kunci, kaedah ini menjamin bahawa hanya satu utas boleh mengaksesnya pada bila-bila masa. Akibatnya, output akan konsisten dan tidak bersilang.
Ingat bahawa adalah penting untuk menggunakan kaedah ini secara konsisten sepanjang kod anda. Jika mana-mana urutan memanggil System.out.println secara langsung, output mungkin masih bersilang.
Atas ialah kandungan terperinci Bolehkah Berbilang Benang Antara Keluaran Apabila Menggunakan System.out.println()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!