Bolehkah Output Multi-Threaded System.out.println Dijalin?
API Java untuk System.out.println(String) kekurangan jaminan penyegerakan eksplisit, menimbulkan persoalan tentang persilangan keluaran daripada berbilang benang.
Bolehkah Output Dijalin?
Tanpa penyegerakan, output daripada berbilang benang boleh dijalin. Ini bermakna bahawa aksara daripada urutan yang berbeza boleh dicampur dalam satu baris output.
Sebagai contoh, pertimbangkan berbilang rangkaian yang melaksanakan kod:
System.out.println("ABC");
Output yang dijangkakan hendaklah:
ABC ABC
Walau bagaimanapun, interleaving boleh mengakibatkan:
AABC BC
Adakah Penimbalan Mencegah Interleaving?
Walaupun penimbal dan model memori VM berpotensi menghalang interleaving dalam beberapa kes, ini tidak boleh dipercayai. Spesifikasi Java API tidak menjamin penulisan baris atom untuk System.out.println.
Memastikan Output Tidak Berinterleaved
Untuk mengelakkan interleaving dan memastikan output disegerakkan, penyegerakan manual mesti dikuatkuasakan. Ini boleh dicapai dengan menggunakan blok disegerakkan atau dengan menggunakan kaedah pencetakan selamat benang yang disediakan oleh pustaka Java.
Sebagai contoh, kod berikut menambah blok disegerakkan ke System.out.println:
public void safePrintln(String s) { synchronized (System.out) { System.out.println(s); } }
Dengan menggunakan kaedah ini secara konsisten di seluruh kod, interleaving output boleh dihapuskan, memastikan garisan daripada benang berbeza kekal berasingan dan teratur.
Atas ialah kandungan terperinci Bolehkah Output `System.out.println` Berbilang Benang Dijalin?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!