ステータスオブジェクトとステータスオブジェクトなし

3616 ワード

1、プロセスとスレッドの関係
プロセスは一定の独立した機能を持つプログラムであるあるデータ集合上の一回の運行活動について、プロセスはシステムが資源の分配とスケジューリングを行う一つの独立した単位である.スレッドはプロセスの一つの実体であり、CPUのスケジューリングと割り当ての基本単位であり、それはプロセスよりもっと小さい独立して運行できる基本単位である.また、プロセスは実行過程で独立したメモリユニットを持っている.複数のスレッドがメモリを共有することで、プログラムの実行効率が大幅に向上します.プロセスには独立したアドレス空間がある
プロセスには、テキスト領域(text region)、データ領域(data region)、スタック(stack region)を含む個別のアドレス空間があります.テキスト領域ストレージプロセッサが実行するコード;データ領域は、変数とプロセス実行中に使用される動的割り当てのメモリを格納します.スタック領域には、アクティブなプロシージャ呼び出しの命令とローカル変数が格納されます.
スレッドには独自のスタックとローカル変数がありますが、スレッド間にはアドレス空間がありません.
1つのスレッドには、次の内容が含まれます.現在実行されている命令を指す命令ポインタ.1つのスタック;実行中のスレッドのプロセッサ状態を記述する値の一部を定義するレジスタ値のセット.プライベートなデータ領域です.
2、スレッドセキュリティ
コードが存在するプロセスで複数のスレッドが同時に実行されている場合、これらのスレッドはこのコードを同時に実行する可能性があります.実行結果が単一スレッドで実行されるたびに同じであり、他の変数の値も予想通りである場合、スレッドは安全です.1つのクラスまたはプログラムが提供するインタフェースは、スレッドにとって原子操作または複数のスレッド間の切り替えであり、インタフェースの実行結果に二義性をもたらすことはありません.すなわち、同期の問題を考慮する必要はありません.スレッドセキュリティの問題は、グローバル変数および静的変数によって引き起こされます.各スレッドの中でグローバル変数、静的変数に対して読み取り操作のみで、書き込み操作がない場合、一般的に、このグローバル変数はスレッドが安全である.複数のスレッドが同時に書き込みを実行する場合は、スレッドの同期を考慮する必要があります.そうしないと、スレッドのセキュリティに影響を与える可能性があります.
3、スレッドセキュリティについて
1)定数は、リード操作のみが存在するため、常にスレッドが安全である.2)メソッドを呼び出すたびに新しいインスタンスを作成するのは、共有リソース(共有スタックメモリ)にアクセスしないため、スレッドが安全です.3)ローカル変数はスレッドが安全である.メソッドを実行するたびに、共有リソースではなく独立した空間にローカル変数が作成されるためです.ローカル変数には、メソッドのパラメータ変数とメソッド内の変数が含まれます.
3、状態のあるオブジェクトとないオブジェクト
ステータスがあるとデータストレージ機能があります.ステータスオブジェクト(Stateful Bean)は、インスタンス変数(メンバー変数)のあるオブジェクトであり、データを保存することができ、スレッドではなく安全です.異なるメソッド呼び出し間でステータスは保持されません.実はデータメンバーがいるオブジェクトです.
ステータスなしは1回の操作で、データを保存できません.ステータスレスオブジェクト(Stateless Bean)は、インスタンス変数(メンバー変数)のないオブジェクトです.データを保存できません.不変クラスで、スレッドは安全です.具体的には、メソッドのみがデータ・メンバーのないオブジェクト、またはデータ・メンバーがあるがデータ・メンバーは読み取り可能なオブジェクトである.
コードは次のとおりです.
/** 
 *    bean, state,user   ,  user     ,    。 user MVC  M,   ,     *        setter、getter  ,      ,     ;       。
*/
public class StatefulBean {  

    public int state;  
    //         ,user     ,         
    public User user;  

    public int getState() {  
        return state;  
    }  

    public void setState(int state) {  
        this.state = state;  
    }  

    public User getUser() {  
        return user;  
    }  

    public void setUser(User user) {  
        this.user = user;  
    }  
}  

/** 
 *    bean,      。        ,       。          。 
 *   BillDao dao  ,   find,add,save  。dao       ,     ;         。
 *  /

public class StatelessBeanService {  

    //    BillDao  , billDao        , Stateless Bean.  
    BillDao billDao;  

    public BillDao getBillDao() {  
        return billDao;  
    }  

    public void setBillDao(BillDao billDao) {  
        this.billDao = billDao;  
    }  

    public List findUser(String Id) {  
         return null;  
    }  
}