BlockingQueue介绍及选拔

1.BlockingQueue队列和常常队列一样都得以用来作为存款和储蓄数据的容器,但有时候在线程个中

微软顶住Visual Studio部门的信用合作社副CEOJasonZander刚刚公布博客,发布Visual
Studio 2011和.NET Framework
4.5现行反革命早已足以下载。同时提供MSDN订户、付费版本、试用版和免费Express版。

提到到数码存款和储蓄的时候就会冒出难题,而BlockingQueue是空的话,要是四个线程要从BlockingQueue

葡京在线开户 1

里取多少的时候,该线程将会被阻断,并跻身等待状态,直到BlockingQueue里面有数量存入了后,就会

Zander博客列举了进步到Visual Studio 二〇一一的十二安顺由:

提示线程举行数据的删减。若BlockingQueue是满的,如若三个线程要将数据存入BlockQueue,该线程

1. Windows 8开发

将会被阻断,并跻身等待情状,直到BlcokQueue里面包车型客车数码被取出有空间后,线程被唤醒后在将数据存入、

Visual Studio 贰零壹贰为Windows
8应用开发提供了周详扶助,从沙盘、设计器到调节和测试、测试。附带的可视化创作工具Blend(即此前的Expression
Blend)今后同时辅助HTML/CSS和XAML。更加多详情:http://blogs.msdn.com/b/windowsappdev/

 

2. Web开发

2.重庆大学涉嫌的主意:

Visual Studio 2013在Web开发上也下了一番武术,除了ASP.NET
4.5的不可计数新特色(Web优化、ASP.NET MVC
4等,具体参见这里.aspx#whatsnew_feature))外,对JavaScript支持大大进步,包涵引入智能提示速龙liSense(同时更好地支撑XML)、DOM查看器和JavaScript控制台、对第3方库jQuery和RequireJS的原生物化学帮助。

    BlockingQueue 方法以三种样式出现,对于无法立时知足但或者在未来某一随时能够满意的操作,那多样情势的处理方式差别:第1种是抛出3个老大,第三种是回来贰个奇特值(null 或 false,具体取决于操作),第三种是在操作能够成功前,无限期地打断当前线程,第拾种是在放弃前只在给定的最大日子限定内阻塞。下表中计算了那一个办法:

3. Windows Phone 8开发

 
抛出异常 特殊值 阻塞 超时
插入 add(e) offer(e) put(e) offer(e, time, unit)
移除 remove() poll() take() poll(time, unit)
检查 element() peek() 不可用 不可用

鉴于Windows Phone
8本人和SDK都未曾颁发,那地点支撑方今并未形成,今后将通过在线宣布。推断首要新增特色是支撑期待已久的C++原生开发,还有公司应用。具体情况还得看WP团队博客的再三再四发表。

 

4. Windows Azure开发

3.BlockingQueue定义的常用方法详解: 
       
1)add(anObject):把anObject加到BlockingQueue里,即假诺BlockingQueue能够包容,则赶回true,不然报那三个 
       
2)offer(anObject):表示假使恐怕的话,将anObject加到BlockingQueue里,即只要BlockingQueue能够容纳,则赶回true,不然再次来到false. 
       
3)put(anObject):把anObject加到BlockingQueue里,要是BlockQueue没有空间,则调用此方法的线程被堵嘴直到BlockingQueue里面有空间再持续. 
       
4)poll(time):取走BlockingQueue里排在第②个人的靶子,若不可能立即取出,则足以等time参数规定的大运,取不到时重返null 
       
5)take():取走BlockingQueue里排在第几个人的靶子,若BlockingQueue为空,阻断进入等待状态直到Blocking有新的指标被插手停止 
    2.BlockingQueue有七个有血有肉的贯彻类,根据区别供给,选用分歧的落到实处类 
       
1)ArrayBlockingQueue:规定大小的BlockingQueue,其构造函数必须带贰个int参数来指明其大小.其所含的对象是以FIFO(先入先出)顺序排序的. 
       
2)LinkedBlockingQueue:大小不定的BlockingQueue,若其构造函数带二个分明大小的参数,生成的
BlockingQueue有大小限制,若不带大小参数,所生成的BlockingQueue的高低由Integer.MAX_VALUE来决定.其所含
的对象是以FIFO(先入先出)顺序排序的 
       
3)PriorityBlockingQueue:类似于LinkedBlockQueue,但其所含对象的排序不是FIFO,而是依据对象的本来排序依次也许是构造函数的Comparator决定的顺序. 
       
4)SynchronousQueue:特殊的BlockingQueue,对其的操作必须是放和取交替完结的. 
   
3.LinkedBlockingQueue和ArrayBlockingQueue相比较起来,它们背后所用的数据结构分化,导致
LinkedBlockingQueue的数据吞吐量要超越ArrayBlockingQueue,但在线程数量不小时其质量的可预见性低于
ArrayBlockingQueue.     

Visual Studio
二零一三在云应用开发上的协理重点是分布式缓存、越多公布选取和更小的装置内部存款和储蓄器占用。越多详情参见这里

  在网上找到多个例子 

5. 集团应用开发

package com.thread;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

public class BlockingQueueTest {
    public static void main(String[] args) {
        final BlockingQueue queue = new ArrayBlockingQueue(3);
        for(int i=0;i<2;i++){
            new Thread(){
                public void run(){
                    while(true){
                        try {
                            Thread.sleep((long)(Math.random()*1000));
                            System.out.println(Thread.currentThread().getName() + "准备放数据!");                            
                            queue.put(1);
                            System.out.println(Thread.currentThread().getName() + "已经放了数据," +                             
                                        "队列目前有" + queue.size() + "个数据");
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }

                    }
                }

            }.start();
        }

        new Thread(){
            public void run(){
                while(true){
                    try {
                        //将此处的睡眠时间分别改为100和1000,观察运行结果
                        Thread.sleep(1000);
                        System.out.println(Thread.currentThread().getName() + "准备取数据!");
                        queue.take();
                        System.out.println(Thread.currentThread().getName() + "已经取走数据," +                             
                                "队列目前有" + queue.size() + "个数据");                    
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }

        }.start();            
    }
}

那方面包车型地铁亮点是新工具LightSwitch,同时支持桌面和云安排。当然,SharePoint应用开发也更为便利了。Visual
Studio 二零一二对Web开发援助的周到进步,公司应用的前端开发自然也收益颇多。

  ***********************************

6. 玩耍和3D应用开发

public class BlockingQueueCondition {

    public static void main(String[] args) {
        ExecutorService service = Executors.newSingleThreadExecutor();
        final Business3 business = new Business3();
        service.execute(new Runnable(){

            public void run() {
                for(int i=0;i<50;i++){
                    business.sub();
                }
            }

        });

        for(int i=0;i<50;i++){
            business.main();
        }
    }

}

class Business3{
    BlockingQueue subQueue = new ArrayBlockingQueue(1);
    BlockingQueue mainQueue = new ArrayBlockingQueue(1);
    //这里是匿名构造方法,只要new一个对象都会调用这个匿名构造方法,它与静态块不同,静态块只会执行一次,
    //在类第一次加载到JVM的时候执行
    //这里主要是让main线程首先put一个,就有东西可以取,如果不加这个匿名构造方法put一个的话程序就死锁了
    {
        try {
            mainQueue.put(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    public void sub(){
        try
        {
            mainQueue.take();
            for(int i=0;i<10;i++){
                System.out.println(Thread.currentThread().getName() + " : " + i);
            }
            subQueue.put(1);
        }catch(Exception e){

        }
    }

    public void main(){

        try
        {
            subQueue.take();
            for(int i=0;i<5;i++){
                System.out.println(Thread.currentThread().getName() + " : " + i);
            }
            mainQueue.put(1);
        }catch(Exception e){
        }        
    }
}

重中之重是DirectX调试、DirectX shaders (HLSL)等方面包车型客车帮助。

  

7. 对编制程序语言最新性格的辅助

根本是异步编制程序,有了新重点字async和await,编写异步代码和联合时曾经很类似了。

葡京在线开户 2

对C++
11新规范的支撑当然也是重头戏,包罗无状态lambda、SCA奥迪Q5Y迭代器、基于范围的for循环、scoped枚举等。同时经过C++/CX和C++
AMP(接济硬件加快和异构编制程序)协助对Windows奥德赛T组件的无缝访问。

除此以外利用F#类型提供程序和LINQ查询,能够有利于地行使种种数据服务来编制程序。

8. 性质、可靠性和包容性

从下图来看,质量革新的确大名鼎鼎。详情此前有多篇文章葡京在线开户,讲述。其余还有对此前版本开发的品类的兼容性

葡京在线开户 3

9. IDE更有效能

微软这次大公布都有多少个联合署名特性:简化界面。Visual Studio 2012也不例外。

葡京在线开户 4

10. 测试

Visual Studio
2012现行反革命支撑探索式测试(也称高快速检测试,不知道什么样意思?快速谷歌(Google)一下呢)。对第②方测试框架的帮助也大大革新。

11. 急忙实践

对高效的扶助始终是Visual
Studio近多少个本子的基本点之一。VS2011引入了PowerPoint故事板修正团队间联系,Microsoft
Feedback Client能够用来采访共青团和少先队外部的汇报。Team Foundation Server
二〇一二对敏捷流程各环节都提供了更好援助。

12. DevOps

云总括时期,在研究开发流程中引入运维是必定。Visual Studio
二〇一一对此首次提供了支撑,更好地融会微软的云平台管理工科具System
Center,将运营正式纳入为研究开发剧中人物之一。