关于java的多线程的成员变量是否线程安全的疑问?
大家讲道理
大家讲道理 2017-04-18 10:49:12
0
14
1502

对于下面的程序:

public class MyThread extends Thread{
    private Object obj;
    ......
}

请问,这个MyThread里面的成员变量,是不是线程安全的?

因为,MyThread继承了Thread,其使用方式为:new MyThread().start();
所以,这就意味着,每次都是new了新对象,那么,他里面的各个成员变量就是这个对象自己拥有的,所以,是安全的。
我这样理解有问题吗?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

répondre à tous(14)
左手右手慢动作

La vue d'ensemble de la sécurité des threads signifie que lorsque plusieurs threads accèdent au même objet, s'il n'est pas nécessaire de prendre en compte la planification et l'exécution alternative de ces threads dans l'environnement d'exécution, il n'est pas nécessaire d'effectuer une synchronisation supplémentaire ou de faire quoi que ce soit. sinon sur l'appelant Opérations de coordination, l'appel du comportement de cet objet peut obtenir les résultats corrects.
Juger de la sécurité du multi-threading peut être analysé à partir des trois points suivants :

1.明确哪些代码是多线程运行的代码, 
2.明确共享数据,
3.明确多线程运行代码中哪些语句是操作共享数据.

Si plusieurs threads fonctionnent sur des données partagées, les problèmes de sécurité des threads doivent être pris en compte.

黄舟

La situation que vous avez mentionnée est définitivement thread-safe, car elle n'est utilisée que par votre propre thread.

阿神

Votre compréhension est correcte, new MyThread().start() Chaque fois qu'un nouvel objet Thread est utilisé pour démarrer le fil, il n'y a pas de comportement de partage, il est donc thread-safe, la réponse la plus votée

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();
巴扎黑

Un exemple simple
Si vous avez un bonbon et que d'autres veulent le manger, alors il n'est pas sûr, vous constatez donc que vous avez besoin d'une boîte et d'un cadenas pour le verrouiller

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal