搜尋

首頁  >  問答  >  主體

关于java的多线程的成员变量是否线程安全的疑问?

对于下面的程序:

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

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

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

大家讲道理大家讲道理2881 天前1578

全部回覆(14)我來回復

  • ringa_lee

    ringa_lee2017-04-18 10:51:12

    線程安全的概述是指當多個執行緒存取同一個物件時,如果不用考慮這些執行緒在運行時環境下的調度和交替運行,也不需要進行額外的同步,或者在呼叫方進行任何其他的協調操作,呼叫這個物件的行為都可以獲得正確的結果。
    判斷多執行緒的安全可以從以下三點分析:

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

    如果多個執行緒操作一個共享數據,就要考慮執行緒安全性問題。

    回覆
    0
  • 黄舟

    黄舟2017-04-18 10:51:12

    就單純你說的這個情況,肯定是線程安全的,因為只有你自己線程使用.

    回覆
    0
  • 阿神

    阿神2017-04-18 10:51:12

    你的理解是正確的,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();

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:51:12

    一個簡單的例子
    如果你有一個糖果 別人都想吃 那麼就是不安全,這樣你就發現你需要一個盒子和鎖把它鎖起來

    回覆
    0
  • 取消回覆