<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://www.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://www.tkk7.com)原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處.
    主站蜘蛛池模板: 亚洲 日韩 色 图网站| 1024免费福利永久观看网站| 中文字幕亚洲专区| 极品美女一级毛片免费| 在线免费观看一区二区三区| 欧洲 亚洲 国产图片综合| 最近最新MV在线观看免费高清| 亚洲人成在线精品| 18禁免费无码无遮挡不卡网站| 亚洲成a人片在线网站| 日日麻批免费40分钟日本的| 亚洲一区在线免费观看| 一二三四在线播放免费观看中文版视频 | 亚洲一级片免费看| 一级做a爰片久久毛片免费看 | 又粗又大又黑又长的免费视频| 亚洲国产成人精品久久| 台湾一级毛片永久免费 | 亚洲AV成人一区二区三区AV| 久久精品免费一区二区三区| 亚洲AV无码专区国产乱码电影| 无码日韩精品一区二区免费暖暖| 亚洲高清免费在线观看| 精品香蕉在线观看免费| 亚洲AV无码专区在线亚| 免费观看的毛片手机视频| 狠狠入ady亚洲精品| 亚洲第一网站男人都懂| 中文字幕高清免费不卡视频| 亚洲国产精品VA在线观看麻豆 | 91亚洲导航深夜福利| 97性无码区免费| 亚洲欧洲国产综合AV无码久久 | 亚洲视频小说图片| 无码人妻一区二区三区免费| 亚洲中文无码亚洲人成影院| 国产jizzjizz免费视频| 中文字幕a∨在线乱码免费看 | 亚洲精品V欧洲精品V日韩精品| 91福利免费体验区观看区| 国产精品亚洲午夜一区二区三区|