亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? testblockingbuffer.java

?? iBATIS似乎已遠離眾說紛紜的OR框架之列
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
    //-----------------------------------------------------------------------

    /**
     * Tests {@link BlockingBuffer#remove()} in combination with {@link BlockingBuffer#addAll(java.util.Collection)}
     * using multiple read threads.
     * <p/>
     * Two read threads should block on an empty buffer until a singleton collection is added then one thread should
     * complete. The remaining thread should complete after the addition of a second singleton.
     */
    public void testBlockedRemoveWithAddAll1() {
        Buffer blockingBuffer = BlockingBuffer.decorate( new MyBuffer() );
        Object obj = new Object();

        // run methods will remove and compare -- must wait for addAll
        Thread thread1 = new ReadThread( blockingBuffer, obj, null, "remove" );
        Thread thread2 = new ReadThread( blockingBuffer, obj, null, "remove" );
        thread1.start();
        thread2.start();

        // give hungry read threads ample time to hang
        delay();
        blockingBuffer.addAll( Collections.singleton( obj ) );

        // allow notified threads to complete 
        delay();

        // There should be one thread waiting.
        assertTrue( "There is one thread waiting", thread1.isAlive() ^ thread2.isAlive() );
        blockingBuffer.addAll( Collections.singleton( obj ) );

        // allow notified thread to complete 
        delay();

        // There should not be any threads waiting.
        if( thread1.isAlive() || thread2.isAlive() ) {
            fail( "Live thread(s) when both should be dead." );
        }
    }

    //-----------------------------------------------------------------------

    /**
     * Tests {@link BlockingBuffer#remove()} in combination with {@link BlockingBuffer#addAll(java.util.Collection)}
     * using multiple read threads.
     * <p/>
     * Two read threads should block on an empty buffer until a collection with two distinct objects is added then both
     * threads should complete. Each thread should have read a different object.
     */
    public void testBlockedRemoveWithAddAll2() {
        Buffer blockingBuffer = BlockingBuffer.decorate( new MyBuffer() );
        Object obj1 = new Object();
        Object obj2 = new Object();
        Set objs = Collections.synchronizedSet( new HashSet() );
        objs.add( obj1 );
        objs.add( obj2 );

        // run methods will remove and compare -- must wait for addAll
        Thread thread1 = new ReadThread( blockingBuffer, objs, "remove" );
        Thread thread2 = new ReadThread( blockingBuffer, objs, "remove" );
        thread1.start();
        thread2.start();

        // give hungry read threads ample time to hang
        delay();
        blockingBuffer.addAll( objs );

        // allow notified threads to complete 
        delay();
        assertEquals( "Both objects were removed", 0, objs.size() );

        // There should not be any threads waiting.
        if( thread1.isAlive() || thread2.isAlive() ) {
            fail( "Live thread(s) when both should be dead." );
        }
    }

    //-----------------------------------------------------------------------

    /**
     * Tests interrupted remove.
     */
    public void testInterruptedRemove() {
        Buffer blockingBuffer = BlockingBuffer.decorate( new MyBuffer() );
        Object obj = new Object();

        // spawn a read thread to wait on the empty buffer
        ArrayList exceptionList = new ArrayList();
        Thread thread = new ReadThread( blockingBuffer, obj, exceptionList, "remove" );
        thread.start();

        // Interrupting the thread should cause it to throw BufferUnderflowException
        thread.interrupt();

        // Chill, so thread can throw and add message to exceptionList
        delay();
        assertTrue( "Thread interrupt should have led to underflow",
                    exceptionList.contains( "BufferUnderFlow" ) );
        if( thread.isAlive() ) {
            fail( "Read thread has hung." );
        }

    }

    public void testTimeoutGet() {
        final BlockingBuffer buffer = new BlockingBuffer( new MyBuffer() );
        try {
            buffer.get( 100 );
            fail( "Get should have timed out." );
        }
        catch( BufferUnderflowException e ) {
        }
    }

    public void testTimeoutRemove() {
        final BlockingBuffer buffer = new BlockingBuffer( new MyBuffer() );
        try {
            buffer.remove( 100 );
            fail( "Get should have timed out." );
        }
        catch( BufferUnderflowException e ) {
        }
    }

    protected static class DelayedAdd extends Thread {

        Buffer buffer;

        Object obj;

        long delay = 1000;

        public DelayedAdd( Buffer buffer, Object obj, long delay ) {
            this.buffer = buffer;
            this.obj = obj;
            this.delay = delay;
        }

        DelayedAdd( Buffer buffer, Object obj ) {
            super();
            this.buffer = buffer;
            this.obj = obj;
        }

        public void run() {
            try {
                // wait for other thread to block on get() or remove()
                Thread.sleep( delay );
            }
            catch( InterruptedException e ) {
            }
            buffer.add( obj );
        }
    }

    protected static class DelayedAddAll extends Thread {

        Buffer buffer;

        Object obj;

        long delay = 100;

        public DelayedAddAll( Buffer buffer, Object obj, long delay ) {
            this.buffer = buffer;
            this.obj = obj;
            this.delay = delay;
        }

        DelayedAddAll( Buffer buffer, Object obj ) {
            super();
            this.buffer = buffer;
            this.obj = obj;
        }

        public void run() {
            try {
                // wait for other thread to block on get() or remove()
                Thread.sleep( delay );
            }
            catch( InterruptedException e ) {
            }
            buffer.addAll( Collections.singleton( obj ) );
        }
    }

    protected static class ReadThread extends Thread {

        Buffer buffer;

        Object obj;

        ArrayList exceptionList = null;

        String action = "get";

        Set objs;

        ReadThread( Buffer buffer, Object obj ) {
            super();
            this.buffer = buffer;
            this.obj = obj;
        }

        ReadThread( Buffer buffer, Object obj, ArrayList exceptionList ) {
            super();
            this.buffer = buffer;
            this.obj = obj;
            this.exceptionList = exceptionList;
        }

        ReadThread( Buffer buffer, Object obj, ArrayList exceptionList, String action ) {
            super();
            this.buffer = buffer;
            this.obj = obj;
            this.exceptionList = exceptionList;
            this.action = action;
        }

        ReadThread( Buffer buffer, Set objs, String action ) {
            super();
            this.buffer = buffer;
            this.objs = objs;
            this.action = action;
        }

        public void run() {
            try {
                if( action == "get" ) {
                    assertSame( obj, buffer.get() );
                }
                else {
                    if( null != obj ) {
                        assertSame( obj, buffer.remove() );
                    }
                    else {
                        assertTrue( objs.remove( buffer.remove() ) );
                    }
                }
            }
            catch( BufferUnderflowException ex ) {
                exceptionList.add( "BufferUnderFlow" );
            }
        }
    }

    protected static class MyBuffer extends LinkedList implements Buffer {

        public Object get() {
            if( isEmpty() ) {
                throw new BufferUnderflowException();
            }
            return get( 0 );
        }

        public Object remove() {
            if( isEmpty() ) {
                throw new BufferUnderflowException();
            }
            return remove( 0 );
        }
    }

    private void delay() {
        try {
            Thread.sleep( 100 );
        }
        catch( InterruptedException e ) {
        }
    }

    public String getCompatibilityVersion() {
        return "3.1";
    }

//    public void testCreate() throws Exception {
//        Buffer buffer = BlockingBuffer.decorate(new UnboundedFifoBuffer());
//        writeExternalFormToDisk((java.io.Serializable) buffer,
//        "D:/dev/collections/data/test/BlockingBuffer.emptyCollection.version3.1.obj");
//        buffer = BlockingBuffer.decorate(new UnboundedFifoBuffer());
//        buffer.add("A");
//        buffer.add("B");
//        buffer.add("C");
//        writeExternalFormToDisk((java.io.Serializable) buffer,
//        "D:/dev/collections/data/test/BlockingBuffer.fullCollection.version3.1.obj");
//    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产婷婷色一区二区三区四区| 欧美午夜理伦三级在线观看| 欧美精品一区男女天堂| 免费精品99久久国产综合精品| 69久久99精品久久久久婷婷| 男女视频一区二区| 欧美成人r级一区二区三区| 九九视频精品免费| 久久精品人人爽人人爽| 99久久婷婷国产综合精品电影| 亚洲精品免费一二三区| 欧美人体做爰大胆视频| 男女男精品网站| 中文字幕久久午夜不卡| 色综合久久88色综合天天 | 国产一区在线观看视频| 久久嫩草精品久久久精品一| 97久久精品人人澡人人爽| 亚洲一区在线观看免费观看电影高清| 欧美精品色一区二区三区| 国内精品伊人久久久久影院对白| 中文字幕不卡在线| 欧美片网站yy| 国产精品白丝av| 亚洲精品中文字幕在线观看| 懂色av中文字幕一区二区三区| 日日夜夜精品视频天天综合网| 国产精品自拍网站| 成人欧美一区二区三区1314| 欧美日韩一级片在线观看| 黑人巨大精品欧美黑白配亚洲| 奇米在线7777在线精品| 国产日本欧美一区二区| 欧美日韩小视频| 国产一区二区三区免费| 亚洲三级视频在线观看| 日韩欧美一级精品久久| www.在线成人| 韩国女主播一区| 午夜欧美2019年伦理| 久久精品一区二区三区不卡牛牛 | 国产精品中文字幕日韩精品| 一区二区三区欧美日| 精品国产电影一区二区| 91精品福利在线| 国产电影一区在线| 日韩国产精品久久久| 国产精品久久久久久久久免费丝袜 | 国产午夜亚洲精品羞羞网站| 欧美三级视频在线播放| 成人精品小蝌蚪| 久久99久久久久| 婷婷激情综合网| 亚洲乱码一区二区三区在线观看| 精品女同一区二区| 在线成人午夜影院| 色综合天天综合网国产成人综合天 | 奇米四色…亚洲| 国产精品传媒视频| 婷婷开心激情综合| 亚洲国产美女搞黄色| 国产精品视频在线看| 久久综合色一综合色88| 91精品国产91久久久久久最新毛片 | 国产成人亚洲综合色影视| 日日摸夜夜添夜夜添精品视频| 自拍视频在线观看一区二区| 国产欧美日韩综合| 精品国产一区二区国模嫣然| 欧美一区二区播放| 在线成人免费观看| 欧美色视频一区| 欧美三级韩国三级日本一级| aaa欧美大片| av欧美精品.com| 白白色 亚洲乱淫| 成人h版在线观看| 成人午夜碰碰视频| kk眼镜猥琐国模调教系列一区二区| 国产在线播放一区| 国产成人免费视频精品含羞草妖精| 国内精品视频666| 国产伦精品一区二区三区免费迷| 激情六月婷婷久久| 国产一区二区女| 国产精品18久久久| 成人性生交大合| jizz一区二区| 欧美综合在线视频| 欧美高清精品3d| 91麻豆精品91久久久久同性| 日韩视频一区二区在线观看| 日韩情涩欧美日韩视频| 久久天堂av综合合色蜜桃网| 国产精品天美传媒| 亚洲人精品一区| 亚洲精品欧美激情| 亚洲一区在线观看网站| 日韩av一级片| 国产成人av福利| 色婷婷精品大视频在线蜜桃视频| 欧美性大战久久久久久久蜜臀| 欧美一区二区三区系列电影| 久久久www成人免费无遮挡大片| 国产日韩欧美制服另类| 18成人在线视频| 性做久久久久久免费观看| 蜜桃视频在线观看一区二区| 国产一区二区不卡在线| 96av麻豆蜜桃一区二区| 在线看国产一区二区| 日韩精品专区在线影院观看| 中文字幕av一区 二区| 有坂深雪av一区二区精品| 中文字幕一区二区在线播放 | 国产欧美日韩不卡免费| 一区二区三区在线高清| 免费观看30秒视频久久| 成人激情综合网站| 91精品婷婷国产综合久久性色| 欧美国产综合色视频| 偷窥少妇高潮呻吟av久久免费| 国产盗摄女厕一区二区三区| 欧美影院一区二区| 久久人人爽人人爽| 天天av天天翘天天综合网色鬼国产| 国模大尺度一区二区三区| 91久久一区二区| 久久久久久一二三区| 午夜视频一区二区三区| 成人激情免费电影网址| 日韩免费高清电影| 亚洲一区二区精品视频| 成人视屏免费看| 精品理论电影在线| 亚洲小说春色综合另类电影| 懂色av一区二区在线播放| 日韩一级黄色大片| 夜夜嗨av一区二区三区中文字幕| 国产一区二区女| 欧美一区三区二区| 亚洲一区二区三区四区五区中文| 国产精品综合网| 日韩视频在线永久播放| 亚洲第一狼人社区| 色丁香久综合在线久综合在线观看| 国产婷婷精品av在线| 精品一区二区三区视频在线观看| 欧美色图第一页| 亚洲一区二区视频| 99久久久久免费精品国产| 久久精品在线免费观看| 韩国精品免费视频| 欧美大片顶级少妇| 免费欧美高清视频| 538在线一区二区精品国产| 亚洲一区二区在线视频| 日本精品视频一区二区三区| 中文字幕日韩一区二区| 成人禁用看黄a在线| 国产精品网友自拍| 成人国产电影网| 国产精品传媒入口麻豆| 成人午夜免费电影| 亚洲欧美在线另类| 成人av网址在线| 一区精品在线播放| 91小视频免费看| 一区二区三区国产豹纹内裤在线| 色婷婷亚洲精品| 亚洲午夜日本在线观看| 欧美在线高清视频| 午夜精品一区二区三区免费视频| 欧美私人免费视频| 三级久久三级久久久| 欧美成人官网二区| 国产精品主播直播| 中文字幕一区在线观看视频| 97aⅴ精品视频一二三区| 一区二区欧美视频| 欧美狂野另类xxxxoooo| 久久精品国产亚洲一区二区三区| 精品久久久久香蕉网| 国产成人av电影免费在线观看| 国产精品久久久久久久久免费相片 | 国产一区免费电影| 国产精品午夜久久| 色综合一区二区| 午夜精品影院在线观看| 日韩欧美激情四射| 国产·精品毛片| 日韩伦理av电影| 欧美疯狂做受xxxx富婆| 国产一区 二区 三区一级| 日本一区免费视频| 欧美午夜电影网| 韩日欧美一区二区三区| 亚洲视频一区二区在线| 欧美日韩成人一区二区| 国产精品综合网|