<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    春風(fēng)博客

    春天里,百花香...

    導(dǎo)航

    <2007年11月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    統(tǒng)計(jì)

    公告

    MAIL: junglesong@gmail.com
    MSN: junglesong_5@hotmail.com

    Locations of visitors to this page

    常用鏈接

    留言簿(11)

    隨筆分類(lèi)(224)

    隨筆檔案(126)

    個(gè)人軟件下載

    我的其它博客

    我的鄰居們

    最新隨筆

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    讀寫(xiě)鎖的OO分析

    我們有時(shí)會(huì)遇到對(duì)同一個(gè)內(nèi)存區(qū)域如數(shù)組或者鏈表進(jìn)行多線程讀寫(xiě)的情況,一般來(lái)說(shuō)有以下幾種處理方式:
    1.不加任何限制,多見(jiàn)于讀取寫(xiě)入都很快的情況,但有時(shí)也會(huì)出現(xiàn)問(wèn)題.
    2.對(duì)讀寫(xiě)函數(shù)都加以同步鎖,比如使用singleton模式,這下問(wèn)題是沒(méi)了,但效率也下去了,比如說(shuō)兩個(gè)讀取線程不是非要排隊(duì)進(jìn)入不可.
    3.讀寫(xiě)鎖,安全和效率都得到了解決,特別合適讀線程多于寫(xiě)線程的情況.也就是下面將要展現(xiàn)的模式.

    讀寫(xiě)鎖的本意是分別對(duì)讀寫(xiě)狀態(tài)進(jìn)行互斥區(qū)分,有互斥時(shí)才加鎖,否則放行.互斥的情況有:
    1.讀寫(xiě)互斥.
    2.寫(xiě)寫(xiě)互斥.
    不互斥的情況是:讀讀,這種情況不該加以限制.

    我們只要讓鎖對(duì)象知道當(dāng)前讀寫(xiě)狀態(tài)就可以了,再根據(jù)情況進(jìn)行鎖定和解鎖,然后再分情況進(jìn)行鎖定.請(qǐng)看代碼

    代碼如下:
    DataLib類(lèi),注意其中try...finally 的寫(xiě)法,它保證了加鎖解鎖過(guò)程是成對(duì)調(diào)用的:
    package com.sitinspring.readwritelock;

    import java.util.ArrayList;
    import java.util.List;

    /**
     * 數(shù)據(jù)倉(cāng)庫(kù)類(lèi),用于保存數(shù)據(jù)
     * 
     * 
    @author sitinspring(junglesong@gmail.com)
     * 
     
    */

    public class DataLib {
        
    private List<String> datas;

        
    private ReadWriteLock lock;

        
    public DataLib() {
            datas 
    = new ArrayList<String>();
            lock 
    = new ReadWriteLock();
        }


        
    // 寫(xiě)入數(shù)據(jù),這時(shí)不能讀取
        public void writeData(List<String> newDatas) {
            
    try {
                lock.writeLock();
                Test.sleep(
    2);
                datas
    =newDatas;
            }
     finally {
                lock.writeUnlock();
            }

        }


        
    // 讀取數(shù)據(jù),這時(shí)不能寫(xiě)入
        public List<String> readData() {
            
    try {
                lock.readLock();
                Test.sleep(
    1);            
                
    return datas;
            }
     finally {
                lock.readUnlock();
            }


        }


    }

    ReadWriteLock類(lèi),很重要:
    package com.sitinspring.readwritelock;

    /**
     * 讀寫(xiě)鎖,用于線程控制
     * 
    @author sitinspring(junglesong@gmail.com)
     *
     
    */

    public class ReadWriteLock{
        
    // 讀狀態(tài)
        private boolean isRead;
        
        
    // 寫(xiě)狀態(tài)
        private boolean isWrite;
        
        
    public synchronized void readLock(){
            
    // 有寫(xiě)入時(shí)讀取線程停止
            while(isWrite){
                
    try{    
                    System.out.println(
    "有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)");
                    wait();
                }

                
    catch(InterruptedException ex){
                    ex.printStackTrace();
                }

            }

            
            System.out.println(
    "設(shè)定鎖為讀取狀態(tài)");
            isRead
    =true;
        }

        
        
    public synchronized void readUnlock(){
            System.out.println(
    "解除讀取鎖");
            isRead
    =false;
            notifyAll();
        }

        
        
    public synchronized void writeLock(){
            
    // 有讀取時(shí)讀取線程停止
            while(isRead){
                
    try{    
                    System.out.println(
    "有線程在進(jìn)行讀取,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)");
                    wait();
                }

                
    catch(InterruptedException ex){
                    ex.printStackTrace();
                }

            }

            
            
    // 有寫(xiě)入時(shí)寫(xiě)入線程也一樣要停止
            while(isWrite){
                
    try{    
                    System.out.println(
    "有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)");
                    wait();
                }

                
    catch(InterruptedException ex){
                    ex.printStackTrace();
                }

            }

            
            System.out.println(
    "設(shè)定鎖為寫(xiě)入狀態(tài)");
            isWrite
    =true;
        }

        
        
    public synchronized void writeUnlock(){
            System.out.println(
    "解除寫(xiě)入鎖");
            isWrite
    =false;
            notifyAll();
        }

    }


    Writer類(lèi):
    package com.sitinspring.readwritelock;

    import java.util.ArrayList;
    import java.util.Random;

    /**
     * 用于讀取文件,寫(xiě)入數(shù)據(jù)倉(cāng)庫(kù)
     * 
    @author sitinspring(junglesong@gmail.com)
     *
     
    */

    public class Writer implements Runnable{
        
    private DataLib dataLib;
        
    private static final Random random=new Random();
        
    private String[] mockDatas={"","","","","","","","","",""};    
        
        
    public Writer(DataLib dataLib,String[] mockDatas){
            
    this.dataLib=dataLib;
            
    this.mockDatas=mockDatas;
            
            Thread thread
    =new Thread(this);
            thread.start();
        }

        
        
    public void run(){
            
    while(true){
                Test.sleep(random.nextInt(
    3));
                
                
    int startIndex=random.nextInt(mockDatas.length);
                
                ArrayList
    <String> newDatas=new ArrayList<String>();
                
    for(int i=startIndex;i<mockDatas.length;i++){
                    newDatas.add(mockDatas[i]);
                }

                
                dataLib.writeData(newDatas);
            }

        }

    }


    Reader類(lèi):
    package com.sitinspring.readwritelock;

    import java.util.List;
    import java.util.Random;

    /**
     * 用于從數(shù)據(jù)倉(cāng)庫(kù)中得到數(shù)據(jù)
     * 
    @author sitinspring(junglesong@gmail.com)
     *
     
    */

    public class Reader implements Runnable{
        
    private DataLib dataLib;
        
    private static final Random random=new Random();
        
        
    public Reader(DataLib dataLib){
            
    this.dataLib=dataLib;
        
            Thread thread
    =new Thread(this);
            thread.start();
        }

        
        
    public void run(){
            
    while(true){
                Test.sleep(random.nextInt(
    2));            
                List
    <String> datas=dataLib.readData();
                
                System.out.print(
    ">>取得數(shù)組為:");
                
    for(String data:datas){
                    System.out.print(data
    +",");
                }

                System.out.print(
    "\n");
            }

        }

    }


    測(cè)試類(lèi):
    package com.sitinspring.readwritelock;

    /**
     * main函數(shù)所在類(lèi)
     * 
    @author sitinspring(junglesong@gmail.com)
     *
     
    */

    public class Test{
        
    public static void main(String[] args){
            DataLib dataLib
    =new DataLib();
            
            String[] mockDatas1
    ={"","","","","","","","","",""};
            Writer writer1
    =new Writer(dataLib,mockDatas1);
            
            String[] mockDatas2
    ={"","","","","","","","","","","",""};
            Writer writer2
    =new Writer(dataLib,mockDatas2);
            
            Reader reader1
    =new Reader(dataLib);
            Reader reader2
    =new Reader(dataLib);
            Reader reader3
    =new Reader(dataLib);
        }

        
        
        
    // 用于延時(shí)
        public static void sleep(int sleepSecond){
            
    try{
                Thread.sleep(sleepSecond
    *1000);
            }

            
    catch(Exception ex){
                ex.printStackTrace();
            }

        }

    }


    測(cè)試結(jié)果:
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    解除讀取鎖
    >>取得數(shù)組為:
    設(shè)定鎖為讀取狀態(tài)
    有線程在進(jìn)行讀取,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行讀取,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    設(shè)定鎖為寫(xiě)入狀態(tài)
    >>取得數(shù)組為:
    解除讀取鎖
    >>取得數(shù)組為:
    解除讀取鎖
    >>取得數(shù)組為:
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為寫(xiě)入狀態(tài)
    解除讀取鎖
    >>取得數(shù)組為:亥,
    解除讀取鎖
    >>取得數(shù)組為:亥,
    解除讀取鎖
    >>取得數(shù)組為:亥,
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行讀取,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    >>取得數(shù)組為:乙,丙,丁,戊,己,庚,辛,壬,癸,
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    >>取得數(shù)組為:申,酉,戌,亥,
    解除讀取鎖
    >>取得數(shù)組為:申,酉,戌,亥,
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行讀取,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    >>取得數(shù)組為:丁,戊,己,庚,辛,壬,癸,
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    >>取得數(shù)組為:亥,
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    >>取得數(shù)組為:亥,
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    >>取得數(shù)組為:丁,戊,己,庚,辛,壬,癸,
    解除讀取鎖
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    >>取得數(shù)組為:丁,戊,己,庚,辛,壬,癸,
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行讀取,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    >>取得數(shù)組為:巳,午,未,申,酉,戌,亥,
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    >>取得數(shù)組為:巳,午,未,申,酉,戌,亥,
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為寫(xiě)入狀態(tài)
    解除讀取鎖
    >>取得數(shù)組為:戌,亥,
    解除讀取鎖
    >>取得數(shù)組為:戌,亥,
    解除讀取鎖
    >>取得數(shù)組為:戌,亥,
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    有線程在進(jìn)行讀取,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    解除讀取鎖
    >>取得數(shù)組為:丙,丁,戊,己,庚,辛,壬,癸,
    解除讀取鎖
    >>取得數(shù)組為:丙,丁,戊,己,庚,設(shè)定鎖為寫(xiě)入狀態(tài)
    辛,壬,癸,
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    >>取得數(shù)組為:丙,丁,戊,己,庚,辛,壬,癸,
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行讀取,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    >>取得數(shù)組為:癸,
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    >>取得數(shù)組為:癸,
    解除讀取鎖
    >>取得數(shù)組為:癸,
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為寫(xiě)入狀態(tài)
    解除讀取鎖
    >>取得數(shù)組為:戊,己,庚,辛,壬,癸,
    解除讀取鎖
    >>取得數(shù)組為:戊,己,庚,辛,壬,癸,
    解除讀取鎖
    >>取得數(shù)組為:戊,己,庚,辛,壬,癸,
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行讀取,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    >>取得數(shù)組為:乙,丙,丁,戊,己,庚,辛,壬,癸,
    解除讀取鎖
    >>取得數(shù)組為:乙,解除讀取鎖
    >>取得數(shù)組為:乙,丙,丁,戊,己,庚,辛,壬,癸,
    丙,丁,戊,己,庚,辛,有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    壬,癸,
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為寫(xiě)入狀態(tài)
    解除讀取鎖
    >>取得數(shù)組為:庚,辛,壬,癸,
    解除讀取鎖
    >>取得數(shù)組為:庚,辛,壬,癸,
    解除讀取鎖
    >>取得數(shù)組為:庚,辛,壬,癸,
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行讀取,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    >>取得數(shù)組為:亥,
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    >>取得數(shù)組為:亥,
    解除讀取鎖
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    >>取得數(shù)組為:有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    亥,
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為寫(xiě)入狀態(tài)
    解除讀取鎖
    >>取得數(shù)組為:癸,
    解除讀取鎖
    >>取得數(shù)組為:癸,
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    >>取得數(shù)組為:癸,
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    >>取得數(shù)組為:申,酉,戌,亥,
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    有線程在進(jìn)行讀取,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    解除讀取鎖
    >>取得數(shù)組為:癸,
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    >>取得數(shù)組為:癸,
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    >>取得數(shù)組為:癸,
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行讀取,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    >>取得數(shù)組為:戊,己,庚,辛,壬,癸,
    解除讀取鎖
    >>取得數(shù)組為:戊,己,庚,辛,壬,癸,
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行讀取,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    >>取得數(shù)組為:亥,
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    >>取得數(shù)組為:亥,
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行讀取,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    >>取得數(shù)組為:丁,戊,己,庚,辛,壬,癸,
    解除讀取鎖
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    >>取得數(shù)組為:丁,戊,己,庚,辛,壬,癸,
    解除寫(xiě)入鎖
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為寫(xiě)入狀態(tài)
    解除讀取鎖
    >>取得數(shù)組為:癸,
    解除讀取鎖
    >>取得數(shù)組為:癸,
    解除讀取鎖
    >>取得數(shù)組為:癸,
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行讀取,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    解除讀取鎖
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    >>取得數(shù)組為:辰,巳,午,未,申,酉,戌,亥,
    有線程在進(jìn)行寫(xiě)入,寫(xiě)入線程停止,進(jìn)入等待狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)
    解除寫(xiě)入鎖
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為讀取狀態(tài)
    設(shè)定鎖為寫(xiě)入狀態(tài)
    有線程在進(jìn)行寫(xiě)入,讀取線程停止,進(jìn)入等待狀態(tài)

    代碼下載:
    http://m.tkk7.com/Files/sitinspring/ReadWriteLock20071021115927.rar

    posted on 2007-10-21 11:42 sitinspring 閱讀(3279) 評(píng)論(2)  編輯  收藏 所屬分類(lèi): Object Orient Programming

    評(píng)論

    # re: 讀寫(xiě)鎖的OO分析[未登錄](méi) 2007-11-13 13:38 曲強(qiáng) Nicky

    http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/ReentrantWriterPreferenceReadWriteLock.html
    這個(gè)挺有意思的。

    AOP我在學(xué),感覺(jué)思想不錯(cuò)  回復(fù)  更多評(píng)論   

    # re: 讀寫(xiě)鎖的OO分析 2007-11-14 19:12 sitinspring

    @曲強(qiáng) Nicky

    兩者差不多嘛,讀寫(xiě)鎖對(duì)于Cache是很有用的.
      回復(fù)  更多評(píng)論   

    sitinspring(http://m.tkk7.com)原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處.
    主站蜘蛛池模板: 中文字幕在线亚洲精品| 国产乱码免费卡1卡二卡3卡| 免费国产在线观看老王影院| 亚洲人成色777777精品| 野花高清在线电影观看免费视频 | 亚洲Av永久无码精品黑人| 无人在线直播免费观看| 亚洲伊人久久大香线蕉啊| 在线视频精品免费| 亚洲AV无码成人专区| 精品亚洲国产成AV人片传媒| 全免费a级毛片免费看| 色噜噜综合亚洲av中文无码| 57pao国产成永久免费视频| 久久久亚洲AV波多野结衣| 免费毛片a在线观看67194| 亚洲色大成网站www永久男同| 免费高清在线影片一区| 美女被吸屁股免费网站| 精品国产日韩亚洲一区| 精品成人免费自拍视频| 亚洲黄色免费电影| 免费观看男人免费桶女人视频| 美女裸体无遮挡免费视频网站| 亚洲国产专区一区| 日本免费一区二区三区| 天天爽亚洲中文字幕| heyzo亚洲精品日韩| 精品亚洲永久免费精品| 久久夜色精品国产噜噜亚洲a| 免费v片视频在线观看视频| 伊人久久大香线蕉免费视频| 亚洲白嫩在线观看| 国产精品久免费的黄网站| 中文成人久久久久影院免费观看 | 亚洲av中文无码字幕色不卡| 在线观看亚洲精品国产| 波多野结衣免费在线| 国产精品免费一区二区三区| 337p日本欧洲亚洲大胆色噜噜| 免费人成年激情视频在线观看|