Sama ada keselamatan benang berkaitan dengan sama ada ia digunakan dalam berbilang benang
Walaupun anda mentakrifkan private, terdapat banyak cara untuk mengaksesnya secara tidak langsung dalam urutan lain, jadi adalah mungkin untuk menggunakannya dalam berbilang urutan, tetapi tiada pemprosesan penyegerakan ditambahkan pada kod itu.
Tambahan
Tiada perbezaan antara menggunakan Thread dan Runnable:
public class Test {
public static void main(String[] args) throws Exception {
MyThread mt = new MyThread();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
// MyRunable mr = new MyRunable();
// new Thread(mr).start();
// new Thread(mr).start();
// new Thread(mr).start();
}
}
class MyThread extends Thread {
private int ticket = 10;
public void run() {
for (int i = 0; i < 20; i++) {
if (this.ticket > 0) {
System.out.println("thread: " + this.ticket--);
}
}
}
}
class MyRunable implements Runnable {
private int ticket = 10;
public void run() {
for (int i = 0; i < 20; i++) {
if (this.ticket > 0) {
System.out.println("runable: " + this.ticket--);
}
}
}
}
Contoh berjalan tanpa kes (anda perlu menjalankannya beberapa kali untuk mencarinya)
Setiap kali objek baharu dicipta, peta di dalamnya dimiliki oleh objek itu sendiri, jadi ia selamat.
Ayat ini betul, melainkan anda mengisytiharkan ahli awam (pembolehubah) dalam utas utama yang memanggil sub-urutan dan mengendalikan pembolehubah awam di dalam sub-utas, atau anda menghantar pembolehubah awam melalui rujukan ke dalam Ini akan membawa kepada kemunculan masalah ketidakamanan benang Mengenai sama ada jenis peta itu sendiri selamat untuk benang, saya juga terlupa (saya ingat peta itu adalah antara muka. Sama ada ia selamat atau tidak bergantung padanya. Untuk pelaksanaan khusus beliau) , anda boleh mencarinya di Baidu. . .
Jika pelaksanaan peta itu sendiri selamat untuk benang, maka tidak kira bagaimana anda beroperasi di dalam berbilang benang, ia akan baik-baik saja. (Walaupun ia diisytiharkan dalam utas utama dan diluluskan dengan merujuk kepada sub-utas)
Untuk pengetahuan sains keselamatan benang khusus, anda boleh membaca artikel yang saya tulis sebelum ini https://zhuanlan.zhihu.com/p/...
Cara meletakkannya, ia seperti: Anda memasukkan wang ke dalam beg pakaian anda dan berjalan di jalanan seorang diri. Anda fikir ia selamat, sudah tentu. Tetapi apabila ia dirompak, ia tidak selamat. . .
Keselamatan utas bermaksud bahawa utas yang berbeza mengakses data yang sama Jika hanya terdapat satu utas, tiada keselamatan utas. Atau anda juga boleh memahaminya sebagai "selamat", selepas semua, tiada objek lain boleh mengaksesnya, tetapi ia bukan "selamat benang"
Jawab soalan:
Adakah benang objek peta ini tidak selamat?
Ya, benang tidak selamat. Oleh kerana walaupun setiap objek Thread di sini mempunyai objek Peta yang unik dan bebas, ia tidak mempunyai "keupayaan keselamatan benang". Nah, ini pemahaman saya, nampaknya agak bertele-tele. . . ==
Fikirkan MyThread hanya sebagai kelas (jangan fikir ia adalah kelas benang), fikirkan obj hanya sebagai ahli kelas ini. Kemudian ia menjadi lebih mudah untuk difahami.
Ia bergantung terutamanya pada sama ada anda telah mengakses sumber awam tertentu Soalan ini tidak melibatkan akses kepada sumber awam tertentu, jadi ia tidak boleh dikatakan selamat atau tidak selamat.
Ia bergantung terutamanya pada sama ada anda telah mengendalikan pembolehubah ini dan dengan mengandaikan bahawa anda mencipta objek baharu setiap kali, ia adalah selamat untuk benang.
Sama ada keselamatan benang berkaitan dengan sama ada ia digunakan dalam berbilang benang
Walaupun anda mentakrifkan
private
, terdapat banyak cara untuk mengaksesnya secara tidak langsung dalam urutan lain, jadi adalah mungkin untuk menggunakannya dalam berbilang urutan, tetapi tiada pemprosesan penyegerakan ditambahkan pada kod itu.Tambahan
Tiada perbezaan antara menggunakan Thread dan Runnable:
Contoh berjalan tanpa kes (anda perlu menjalankannya beberapa kali untuk mencarinya)
Ayat ini betul, melainkan anda mengisytiharkan ahli awam (pembolehubah) dalam utas utama yang memanggil sub-urutan dan mengendalikan pembolehubah awam di dalam sub-utas, atau anda menghantar pembolehubah awam melalui rujukan ke dalam Ini akan membawa kepada kemunculan masalah ketidakamanan benang Mengenai sama ada jenis peta itu sendiri selamat untuk benang, saya juga terlupa (saya ingat peta itu adalah antara muka. Sama ada ia selamat atau tidak bergantung padanya. Untuk pelaksanaan khusus beliau) , anda boleh mencarinya di Baidu. . .
Jika pelaksanaan peta itu sendiri selamat untuk benang, maka tidak kira bagaimana anda beroperasi di dalam berbilang benang, ia akan baik-baik saja. (Walaupun ia diisytiharkan dalam utas utama dan diluluskan dengan merujuk kepada sub-utas)
Untuk pengetahuan sains keselamatan benang khusus, anda boleh membaca artikel yang saya tulis sebelum ini https://zhuanlan.zhihu.com/p/...
Cara meletakkannya, ia seperti:
Anda memasukkan wang ke dalam beg pakaian anda dan berjalan di jalanan seorang diri.
Anda fikir ia selamat, sudah tentu.
Tetapi apabila ia dirompak, ia tidak selamat. . .
Keselamatan utas bermaksud bahawa utas yang berbeza mengakses data yang sama Jika hanya terdapat satu utas, tiada keselamatan utas. Atau anda juga boleh memahaminya sebagai "selamat", selepas semua, tiada objek lain boleh mengaksesnya, tetapi ia bukan "selamat benang"
Jawab soalan:
Ya, benang tidak selamat.
Oleh kerana walaupun setiap objek Thread di sini mempunyai objek Peta yang unik dan bebas, ia tidak mempunyai "keupayaan keselamatan benang".
Nah, ini pemahaman saya, nampaknya agak bertele-tele. . . ==
Terima kasih atas jemputan!
ialah apabila mengehadkan penggunaan
new MyThread().start()
kepada线程安全
.Walaupun anda mengisytiharkannya sebagai peribadi, pembolehubah masih boleh dibaca dalam urutan lain Ia tidak selamat tanpa kunci penyegerakan.
Membaca tidak mengapa, menulis akan menyebabkan masalah keselamatan benang. . .
1. Gunakan kaedah kelas selamat benang
2. Gunakan ThreadLocal
Fikirkan
MyThread
hanya sebagai kelas (jangan fikir ia adalah kelas benang), fikirkanobj
hanya sebagai ahli kelas ini. Kemudian ia menjadi lebih mudah untuk difahami.Dalam kes pelbagai benang
Ia bergantung terutamanya pada sama ada anda telah mengakses sumber awam tertentu Soalan ini tidak melibatkan akses kepada sumber awam tertentu, jadi ia tidak boleh dikatakan selamat atau tidak selamat.
Ia bergantung terutamanya pada sama ada anda telah mengendalikan pembolehubah ini dan dengan mengandaikan bahawa anda mencipta objek baharu setiap kali, ia adalah selamat untuk benang.