麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Java > 正文

基于java中BlockingQueue的使用介紹

2019-11-26 16:10:57
字體:
供稿:網(wǎng)友
      最近在維護一個java工程,在群里面也就聊起來java的優(yōu)劣!無奈一些Java的終極粉絲,總是號稱性能已經(jīng)不必C++差,并且很多標準類庫都是大師級的人寫的,如何如何穩(wěn)定等等。索性就認真研究一番,他們給我的一項說明就是,在線程之間投遞消息,用java已經(jīng)封裝好的BlockingQueue,就足夠用了。

      既然足夠用那就寫代碼測試嘍,簡簡單單寫一個小程序做了一番測試:
復(fù)制代碼 代碼如下:

//默認包
import java.util.concurrent.*;

import base.MyRunnable;

public class Test
{
    public static void main(String[] args)
    {
        BlockingQueue<Integer> queue = new LinkedBlockingQueue<Integer>();
        java.lang.Runnable r = new MyRunnable(queue);
        Thread t = new Thread(r);
        t.start();

        while(true)
        {
            try
            {
                while(true)
                {
                    for(int i =0;i < 10000;i++)
                    {
                        queue.offer(i);
                    }
                }
            }
            catch ( Exception e)
            {
                e.printStackTrace();
            }
        }
    }
}

 
//需要添加的包
package base;

import java.lang.Runnable;
import java.util.concurrent.*;
import java.util.*;

public class MyRunnable implements Runnable
{
    public MyRunnable(BlockingQueue<Integer> queue)
    {
        this.queue = queue;
    }
    public void run()
    {
        Date d = new Date();
        long starttime = d.getTime();
        System.err.println(starttime);
        int count = 0;
        while(true)
        {
            try
            {
                Integer i = this.queue.poll();
                if(i != null)
                {
                    count ++;
                }
                if(count == 100000)
                {
                    Date e = new Date();
                    long endtime = e.getTime();
                    System.err.println(count);
                    System.err.println(endtime);
                    System.err.print(endtime - starttime);
                    break;
                }

            }
            catch (Exception e)
            {

            }
        }
    }
    private BlockingQueue<Integer> queue;
}

         傳遞十萬條數(shù)據(jù),在我的測試機上面,大概需要50ms左右,倒是還可以!索性就看了一下BlockingQueue的底層實現(xiàn)

 我在上面的測試代碼中使用的offer 和 poll,就看看這兩個實現(xiàn)函數(shù)吧,首先是offer
復(fù)制代碼 代碼如下:

public E poll() {
        final AtomicInteger count = this.count;
        if (count.get() == 0)
            return null;
        E x = null;
        int c = -1;
        final ReentrantLock takeLock = this.takeLock;
        takeLock.lock();
        try {
            if (count.get() > 0) {
                x = extract();
                c = count.getAndDecrement();
                if (c > 1)
                    notEmpty.signal();
            }
        } finally {
            takeLock.unlock();
        }
        if (c == capacity)
            signalNotFull();
        return x;
    }

      和一般的同步線程類似,只是多加了一個signal,在學習unix環(huán)境高級編程時候,看到條件變量用于線程之間的同步,可以實現(xiàn)線程以競爭的方式實現(xiàn)同步!
poll函數(shù)的實現(xiàn)也是類似!
復(fù)制代碼 代碼如下:

public boolean offer(E e) {
        if (e == null) throw new NullPointerException();
        final AtomicInteger count = this.count;
        if (count.get() == capacity)
            return false;
        int c = -1;
        final ReentrantLock putLock = this.putLock;
        putLock.lock();
        try {
            if (count.get() < capacity) {
                insert(e);
                c = count.getAndIncrement();
                if (c + 1 < capacity)
                    notFull.signal();
            }
        } finally {
            putLock.unlock();
        }
        if (c == 0)
            signalNotEmpty();
        return c >= 0;
    }

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: www.777含羞草| 性盈盈盈影院 | 中文在线免费观看 | 高清国产免费 | 成人区一区二区三区 | 国产精品久久久久久238 | 国产精品成人久久久久a级 av电影在线免费 | 午夜精品福利影院 | 欧美日韩一区,二区,三区,久久精品 | 激情视频免费看 | 女人a级毛片 | 性高跟鞋xxxxhd4kvideos | 女人解衣喂奶电影 | 成人午夜在线观看视频 | 亚洲国产综合在线观看 | 色中色激情影院 | 国产精品刺激对白麻豆99 | 亚洲视频在线视频 | 精品一区二区久久久久久按摩 | 国产日本欧美在线观看 | 涩涩屋av | 久久亚洲成人 | 久久亚洲线观看视频 | 国产免费高清在线 | 91成人在线免费观看 | 欧美精品久久久久久久久久 | av在线免费观看不卡 | 国产在线导航 | 久久久精品福利 | 美女扒开腿让男生桶爽网站 | 成人aaaa免费全部观看 | 国产精品视频一区二区三区四 | 成人激情综合网 | 古装三级在线观看 | 婷婷久久影院 | 免费a视频在线观看 | 午夜精品福利在线观看 | 国产欧美精品一区二区三区四区 | 国产亚洲自拍一区 | 少妇色诱麻豆色哟哟 | 久久免费视频一区二区三区 |