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

对于下面的程序:

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

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

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

大家讲道理
大家讲道理

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

全部回复(14)
左手右手慢动作

线程安全的概述是指当多个线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替运行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获取正确的结果。
判断多线程的安全可以从以下三点分析:

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

如果多个线程操作一个共享数据,就要考虑线程安全问题。

黄舟

就单纯你说的这个情况,肯定是线程安全的,因为只有你自己线程使用.

阿神

你的理解是正确的,new MyThread().start() 每次都是new Thread 对象来启动线程,不存在共享行为,所以是线程安全的,最高票的答案

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

一个简单的例子
如果你有一个糖果 别人都想吃 那么就是不安全,这样你就发现你需要一个盒子和锁把它锁起来

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板