Rumah > Soal Jawab > teks badan
对于下面的程序:
public class MyThread extends Thread{
private Object obj;
......
}
请问,这个MyThread里面的成员变量,是不是线程安全的?
因为,MyThread继承了Thread,其使用方式为:new MyThread().start();
所以,这就意味着,每次都是new了新对象,那么,他里面的各个成员变量就是这个对象自己拥有的,所以,是安全的。
我这样理解有问题吗?
ringa_lee2017-04-18 10:51:12
Tinjauan keseluruhan keselamatan benang bermakna apabila berbilang benang mengakses objek yang sama, jika tidak perlu mempertimbangkan penjadualan dan jalan ganti benang ini dalam persekitaran masa jalan, tidak perlu melakukan penyegerakan tambahan atau melakukan apa-apa jika tidak pada operasi Penyelarasan pemanggil, memanggil gelagat objek ini boleh mendapatkan hasil yang betul.
Menilai keselamatan multi-threading boleh dianalisis daripada tiga perkara berikut:
1.明确哪些代码是多线程运行的代码,
2.明确共享数据,
3.明确多线程运行代码中哪些语句是操作共享数据.
Jika berbilang rangkaian beroperasi pada data yang dikongsi, isu keselamatan rangkaian mesti dipertimbangkan.
黄舟2017-04-18 10:51:12
Situasi yang anda nyatakan pastinya selamat untuk thread, kerana ia hanya digunakan oleh thread anda sendiri.
阿神2017-04-18 10:51:12
Pemahaman anda betul, new MyThread().start()
Setiap kali objek Thread baharu digunakan untuk memulakan utas, tiada tingkah laku perkongsian, jadi ia selamat untuk thread, jawapan yang paling banyak diundi
MyThread mt = new MyThread(); // 这里只 new 了一个对象,然后多线程操作,会存在线程安全问题
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();
巴扎黑2017-04-18 10:51:12
Contoh mudah
Jika anda mempunyai gula-gula dan orang lain mahu memakannya, maka ia tidak selamat, jadi anda mendapati bahawa anda memerlukan kotak dan kunci untuk menguncinya