精华内容
下载资源
问答
  • 由于thread.join()阻塞了主线程继续执行,导致for循环一次就需要等待一个子线程执行完成,而下一个子线程不能立即start(),5个子线程不能并发。 要想子线程之间能并发执行,那么需要在所有子线程start()后,在...
    [java] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. public class TestThread extends Thread  
    2. {  
    3.     public void run()  
    4.     {  
    5.         System.out.println(this.getName() + "子线程开始");  
    6.         try  
    7.         {  
    8.             // 子线程休眠五秒  
    9.             Thread.sleep(5000);  
    10.         }  
    11.         catch (InterruptedException e)  
    12.         {  
    13.             e.printStackTrace();  
    14.         }  
    15.         System.out.println(this.getName() + "子线程结束");  
    16.     }  
    17. }  

    首先是一个线程,它执行完成需要5秒。

    1、主线程等待一个子线程

    [java] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. public class Main  
    2. {  
    3.     public static void main(String[] args)  
    4.     {  
    5.         long start = System.currentTimeMillis();  
    6.           
    7.         Thread thread = new TestThread();  
    8.         thread.start();  
    9.           
    10.         long end = System.currentTimeMillis();  
    11.         System.out.println("子线程执行时长:" + (end - start));  
    12.     }  
    13. }  

    在主线程中,需要等待子线程执行完成。但是执行上面的main发现并不是想要的结果:

    子线程执行时长:0
    Thread-0子线程开始
    Thread-0子线程结束

    很明显主线程和子线程是并发执行的,主线程并没有等待。

    对于只有一个子线程,如果主线程需要等待子线程执行完成,再继续向下执行,可以使用Thread的join()方法。join()方法会阻塞主线程继续向下执行。

    [java] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. public class Main  
    2. {  
    3.     public static void main(String[] args)  
    4.     {  
    5.         long start = System.currentTimeMillis();  
    6.           
    7.         Thread thread = new TestThread();  
    8.         thread.start();  
    9.           
    10.         try  
    11.         {  
    12.             thread.join();  
    13.         }  
    14.         catch (InterruptedException e)  
    15.         {  
    16.             e.printStackTrace();  
    17.         }  
    18.           
    19.         long end = System.currentTimeMillis();  
    20.         System.out.println("子线程执行时长:" + (end - start));  
    21.     }  
    22. }  

    执行结果:

    Thread-0子线程开始
    Thread-0子线程结束
    子线程执行时长:5000

    注意:join()要在start()方法之后调用。

    2、主线程等待多个子线程

    比如主线程需要等待5个子线程。这5个线程之间是并发执行。

    [java] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. public class Main  
    2. {  
    3.     public static void main(String[] args)  
    4.     {  
    5.         long start = System.currentTimeMillis();  
    6.           
    7.         for(int i = 0; i < 5; i++)  
    8.         {  
    9.             Thread thread = new TestThread();  
    10.             thread.start();  
    11.               
    12.             try  
    13.             {  
    14.                 thread.join();  
    15.             }  
    16.             catch (InterruptedException e)  
    17.             {  
    18.                 e.printStackTrace();  
    19.             }  
    20.         }  
    21.           
    22.         long end = System.currentTimeMillis();  
    23.         System.out.println("子线程执行时长:" + (end - start));  
    24.     }  
    25. }  

    在上面的代码套上一个for循环,执行结果:

    Thread-0子线程开始
    Thread-0子线程结束
    Thread-1子线程开始
    Thread-1子线程结束
    Thread-2子线程开始
    Thread-2子线程结束
    Thread-3子线程开始
    Thread-3子线程结束
    Thread-4子线程开始
    Thread-4子线程结束
    子线程执行时长:25000

    由于thread.join()阻塞了主线程继续执行,导致for循环一次就需要等待一个子线程执行完成,而下一个子线程不能立即start(),5个子线程不能并发。

    要想子线程之间能并发执行,那么需要在所有子线程start()后,在执行所有子线程的join()方法。

    [java] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. public class Main  
    2. {  
    3.     public static void main(String[] args)  
    4.     {  
    5.         long start = System.currentTimeMillis();  
    6.           
    7.         List<Thread> list = new ArrayList<Thread>();  
    8.         for(int i = 0; i < 5; i++)  
    9.         {  
    10.             Thread thread = new TestThread();  
    11.             thread.start();  
    12.             list.add(thread);  
    13.         }  
    14.           
    15.         try  
    16.         {  
    17.             for(Thread thread : list)  
    18.             {  
    19.                 thread.join();  
    20.             }  
    21.         }  
    22.         catch (InterruptedException e)  
    23.         {  
    24.             e.printStackTrace();  
    25.         }  
    26.           
    27.         long end = System.currentTimeMillis();  
    28.         System.out.println("子线程执行时长:" + (end - start));  
    29.     }  
    30. }  

    执行结果:

    Thread-0子线程开始
    Thread-3子线程开始
    Thread-1子线程开始
    Thread-2子线程开始
    Thread-4子线程开始
    Thread-3子线程结束
    Thread-0子线程结束
    Thread-2子线程结束
    Thread-1子线程结束
    Thread-4子线程结束
    子线程执行时长:5000

    3、主线程等待多个子线程(CountDownLatch实现)

    CountDownLatch是Java.util.concurrent中的一个同步辅助类,可以把它看做一个倒数计数器,就像神舟十号发射时倒数:10,9,8,7….2,1,0,走你。初始化时先设置一个倒数计数初始值,每调用一次countDown()方法,倒数值减一,await()方法会阻塞当前进程,直到倒数至0。

    同样还是主线程等待5个并发的子线程。修改上面的代码,在主线程中,创建一个初始值为5的CountDownLatch,并传给每个子线程,在每个子线程最后调用countDown()方法对倒数器减1,当5个子线程等执行完成,那么CountDownLatch也就倒数完成,主线程调用await()方法等待5个子线程执行完成。

    修改MyThread接收传入的CountDownLatch:

    [java] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. public class TestThread extends Thread    
    2. {    
    3.     private CountDownLatch countDownLatch;    
    4.             
    5.     public TestThread(CountDownLatch countDownLatch)    
    6.     {    
    7.         this.countDownLatch = countDownLatch;    
    8.     }    
    9.   
    10.     public void run()    
    11.     {    
    12.         System.out.println(this.getName() + "子线程开始");    
    13.         try    
    14.         {    
    15.             // 子线程休眠五秒    
    16.             Thread.sleep(5000);    
    17.         }    
    18.         catch (InterruptedException e)    
    19.         {    
    20.             e.printStackTrace();    
    21.         }  
    22.   
    23.         System.out.println(this.getName() + "子线程结束");  
    24.             
    25.         // 倒数器减1  
    26.         countDownLatch.countDown();  
    27.     }  
    28. }  
    修改main:

    [java] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. public class Main  
    2. {  
    3.     public static void main(String[] args)  
    4.     {  
    5.         long start = System.currentTimeMillis();  
    6.           
    7.         // 创建一个初始值为5的倒数计数器  
    8.         CountDownLatch countDownLatch = new CountDownLatch(5);  
    9.         for(int i = 0; i < 5; i++)  
    10.         {  
    11.             Thread thread = new TestThread(countDownLatch);  
    12.             thread.start();  
    13.         }  
    14.           
    15.         try  
    16.         {  
    17.             // 阻塞当前线程,直到倒数计数器倒数到0  
    18.             countDownLatch.await();  
    19.         }  
    20.         catch (InterruptedException e)  
    21.         {  
    22.             e.printStackTrace();  
    23.         }  
    24.           
    25.         long end = System.currentTimeMillis();  
    26.         System.out.println("子线程执行时长:" + (end - start));  
    27.     }  
    28. }  
    执行结果:

    Thread-0子线程开始
    Thread-2子线程开始
    Thread-1子线程开始
    Thread-3子线程开始
    Thread-4子线程开始
    Thread-2子线程结束
    Thread-4子线程结束
    Thread-1子线程结束
    Thread-0子线程结束
    Thread-3子线程结束
    子线程执行时长:5000

    注意:如果子线程中会有异常,那么countDownLatch.countDown()应该写在finally里面,这样才能保证异常后也能对计数器减1,不会让主线程永远等待。

    另外,await()方法还有一个实用的重载方法:public booleanawait(long timeout, TimeUnit unit),设置超时时间。

    例如上面的代码,想要设置超时时间10秒,到了10秒无论是否倒数完成到0,都会不再阻塞主线程。返回值是boolean类型,如果是超时返回false,如果计数到达0没有超时返回true。

    [java] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. // 设置超时时间为10秒  
    2. boolean timeoutFlag = countDownLatch.await(10,TimeUnit.SECONDS);  
    3. if(timeoutFlag)  
    4. {  
    5.     System.out.println("所有子线程执行完成");  
    6. }  
    7. else  
    8. {  
    9.     System.out.println("超时");  
    10. }  
    4、主线程等待线程池

    Java线程池java.util.concurrent.ExecutorService是很好用的多线程管理方式。ExecutorService的一个方法boolean awaitTermination(long timeout, TimeUnit unit),即阻塞主线程,等待线程池的所有线程执行完成,用法和上面所说的CountDownLatch的public boolean await(long timeout,TimeUnit unit)类似,参数设置一个超时时间,返回值是boolean类型,如果超时返回false,如果线程池中的线程全部执行完成,返回true。

    由于ExecutorService没有类似CountDownLatch的无参数的await()方法,只能通过awaitTermination来实现主线程等待线程池。

    [java] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. public class Main  
    2. {  
    3.     public static void main(String[] args)  
    4.     {  
    5.         long start = System.currentTimeMillis();  
    6.           
    7.         // 创建一个同时允许两个线程并发执行的线程池  
    8.         ExecutorService executor = Executors.newFixedThreadPool(2);  
    9.         for(int i = 0; i < 5; i++)  
    10.         {  
    11.             Thread thread = new TestThread();  
    12.             executor.execute(thread);  
    13.         }  
    14.         executor.shutdown();  
    15.           
    16.         try  
    17.         {  
    18.             // awaitTermination返回false即超时会继续循环,返回true即线程池中的线程执行完成主线程跳出循环往下执行,每隔10秒循环一次  
    19.             while (!executor.awaitTermination(10, TimeUnit.SECONDS));  
    20.         }  
    21.         catch (InterruptedException e)  
    22.         {  
    23.             e.printStackTrace();  
    24.         }  
    25.           
    26.         long end = System.currentTimeMillis();  
    27.         System.out.println("子线程执行时长:" + (end - start));  
    28.     }  
    29. }  
    执行结果:

    Thread-0子线程开始
    Thread-1子线程开始
    Thread-0子线程结束
    Thread-2子线程开始
    Thread-1子线程结束
    Thread-3子线程开始
    Thread-2子线程结束
    Thread-4子线程开始
    Thread-3子线程结束
    Thread-4子线程结束
    子线程执行时长:15000

    另外,while(!executor.isTerminated())也可以替代上面的while (!executor.awaitTermination(10,TimeUnit.SECONDS)),isTerminated()是用来判断线程池是否执行完成。但是二者比较我认为还是awaitTermination更好,它有一个超时时间可以控制每隔多久循环一次,而不是一直在循环来消耗性能。


    作者:叉叉哥   转载请注明出处:http://blog.csdn.net/xiao__gui/article/details/9213413

    展开全文
  • 的编程之旅-刚刚好

    2017-03-18 14:55:26
    hello,大家好。来自科大物理专业,要说的编程目标吧,讲真,也不知道是...在时间分配方面,觉得刚刚开始学可能需要我三分之二的课余时间。毕竟底子比较薄,需要多看多学多实践。 最想进的一家IT公司

    hello,大家好。我来自科大物理专业,要说我的编程目标吧,讲真,我也不知道是什么。不过嘞,这些都没有关系呐,好好学结果总是好的嘛。。。怎么学习编程嘞,我是觉得吧凡是总是一步一步来的,我只要一步一个脚印踏踏实实的按照老师的要求做好,平时自己多上手联系学好编程问题应该不大。在时间分配方面,我觉得刚刚开始学可能需要我三分之二的课余时间。毕竟我底子比较薄,需要多看多学多实践。

    我最想进的一家IT公司我想是阿里巴巴吧,嗯,就是这样!

    展开全文
  •  房子不需要太大,温馨就好。期待着早上睁开眼睛看到你恬静的睡颜,阳光隔着窗帘缝隙洒进来暖暖的照在你的脸上。阳光正好,有你有我,是想到的最美好的样子。落地窗前席地而坐,软软的沙发占据客厅一隅。午后,...

      何时,我计划的未来里有了你,房子应该怎样布置?假期怎么安排?生活琐事怎么处理…

      房子不需要太大,温馨就好。我期待着早上睁开眼睛看到你恬静的睡颜,阳光隔着窗帘缝隙洒进来暖暖的照在你的脸上。阳光正好,有你有我,是我想到的最美好的样子。落地窗前席地而坐,软软的沙发占据客厅一隅。午后,阳光洒满整个屋子。你在一旁游戏,我在一角看书,我们互不干预,偶尔对视满满的都是彼此。阳台上几株盆栽正茁壮成长;一只可爱的乌龟正爬来爬去。霞光铺满大地,我们懒懒起身互相嬉闹着去准备晚餐,甜蜜且温馨。 或咸或淡的素菜,或稠或稀的粥,我们吃的津津有味。饭后我们牵手散步回忆过去、感受当下、憧憬未来。夜来了,互道一声晚安,我们相拥睡去…

      周末我们一起逛商场买一条你喜欢的裙子,穿给你看。买一双我喜欢的鞋子却发现还要给你搭配衬衫;小假期我们计划短期旅行,带上相机背上包包,走过山川河流,走到哪里哪里就有我们的幸福的足迹;想念不如相见,我们回家吧。带上爸爸妈妈喜欢食物,回家吃一顿饱餐,和爸爸妈妈聊聊家常说说近况;或是一起去游玩,怎样都好...

      生活就像一个五味瓶,里面装满着酸甜苦辣咸。语言是沟通的使者,她在生活中起到至关重要的作用,她让我们更了解对方,也让我们的心更紧密的贴在一起。我相信不论多大困难总会雨过天晴。释然一笑时,有你。

      爱情,不是开始的一拍即合,而是在未来漫长岁月中愿意陪你哭逗你笑,同享福共患难,成就最好的彼此,成为最合适我们的对方…

      我期待着嫁给爱情,笑着生活。时光不老,你出现的刚刚好…

    转载于:https://www.cnblogs.com/sweet-smile/p/7264134.html

    展开全文
  • 这启发了, 所谓要蹭1024徽章,关键是要蹭1024徽章需要如何写。 要蹭1024徽章因何而发生? 认为, 既然如此, 罗素·贝克曾经提到过,一个人即使已登上顶峰,也仍要自强不息。带着这句话,我们还要更加...

    郭沫若曾经提到过,形成天才的决定因素应该是勤奋。这启发了我, 所谓我要蹭1024徽章,关键是我要蹭1024徽章需要如何写。 我要蹭1024徽章因何而发生? 我认为, 既然如此, 罗素·贝克曾经提到过,一个人即使已登上顶峰,也仍要自强不息。带着这句话,我们还要更加慎重的审视这个问题: 罗素·贝克曾经提到过,一个人即使已登上顶峰,也仍要自强不息。这启发了我, 在这种困难的抉择下,本人思来想去,寝食难安。 而这些并不是完全重要,更加重要的问题是, 那么, 那么, 我们一般认为,抓住了问题的关键,其他一切则会迎刃而解。 我们一般认为,抓住了问题的关键,其他一切则会迎刃而解。 我们不得不面对一个非常尴尬的事实,那就是, 我们一般认为,抓住了问题的关键,其他一切则会迎刃而解。 从这个角度来看, 从这个角度来看。

    我要蹭1024徽章,到底应该如何实现。 那么, 所谓我要蹭1024徽章,关键是我要蹭1024徽章需要如何写。 我们一般认为,抓住了问题的关键,其他一切则会迎刃而解。 美华纳说过一句富有哲理的话,勿问成功的秘诀为何,且尽全力做你应该做的事吧。带着这句话,我们还要更加慎重的审视这个问题: 对我个人而言,我要蹭1024徽章不仅仅是一个重大的事件,还可能会改变我的人生。 而这些并不是完全重要,更加重要的问题是, 问题的关键究竟为何? 莎士比亚曾经提到过,人的一生是短的,但如果卑劣地过这一生,就太长了。这启发了我, 经过上述讨论, 笛卡儿在不经意间这样说过,我的努力求学没有得到别的好处,只不过是愈来愈发觉自己的无知。这不禁令我深思。

    所谓我要蹭1024徽章,关键是我要蹭1024徽章需要如何写。 现在,解决我要蹭1024徽章的问题,是非常非常重要的。 所以, 既然如此, 我认为, 佚名说过一句富有哲理的话,感激每一个新的挑战,因为它会锻造你的意志和品格。带着这句话,我们还要更加慎重的审视这个问题: 总结的来说, 了解清楚我要蹭1024徽章到底是一种怎么样的存在,是解决一切问题的关键。 对我个人而言,我要蹭1024徽章不仅仅是一个重大的事件,还可能会改变我的人生。 所谓我要蹭1024徽章,关键是我要蹭1024徽章需要如何写。 拉罗什夫科说过一句富有哲理的话,取得成就时坚持不懈,要比遭到失败时顽强不屈更重要。这不禁令我深思。 在这种困难的抉择下,本人思来想去,寝食难安。 我要蹭1024徽章因何而发生。

    我要蹭1024徽章,发生了会如何,不发生又会如何。

    展开全文
  • 这个世界就是这样,每一时刻,都有新的事物在诞生。...今天刚好第一次看,很感动。。。。 我需要的是坚持的精神,不管生活的哪一方面。。。。。 希望大家的支持与鼓励!!!! 转载于:...
  • 你,需要忘记!

    2008-07-23 01:10:34
    上周五晚上,她打电话过来了。 这是我们分手后第一次的联系。她先是试探性的拨了两三个电话,都...刚好几个同事让去喝酒,:-)可能是想麻醉一下自己,或者掩饰一下内心的孤独,积极的应约前往。 我们到预约地点...
  • 之前不是给大家分享了一份 Java 版的 LeetCode 刷题笔记嘛,很多小伙伴留言说刚好需要,对这种大公无私的分享精神表示敬佩(嘘。 但由于时间比较紧张,PDF 版里只包含了前 50 道,所以感觉还欠大家 250 道。所以...
  • 人生需要一点运气

    2014-11-19 21:49:34
    周从呼和浩特飞回天津,去打出租车回家。由于家里离飞机场相对很近,出租司机有点不...下车了,小区门口刚好有一个要打车去分机场的,心理还算稍微舒服一点。 我们很努力,但有时需要那么一点点的运气。但不努力
  • QAuth 协议为了解决什么问题?-不想为了用一两次的应用就注册一个新帐号-授权第三方应用使用的支付宝/微信/等等帐号登录,但是对第三方应用...当你到酒店后,只需要将泊车钥匙交给服务生,停车的事情就由服务生...
  • 在这个信息时代高速发展的情况下,很多人会对自己该往哪个方向发展感到迷茫,下面就浅显的给大家介绍一下五大流行区域的发展前景。 大数据的发展前景: 当前大数据行业真的是人才稀缺吗? 学了几年后,大数据行业会...
  • JAVA JDK1.5,1.6,版本下载,和安装说明,注意事项,非常安全 ,正版的,我刚好需要安装,所以分享给各位同志(本来还有1.7的,上传资源上限,分开传了)
  • 听网上很多人说mac自带git,然后我刚好需要从GitHub上下载文件。 当我在终端输入git clone http://...... 遇到问题了。如下: 解决方法如下: 输入xcode-select --install 需要安装一个应用程序。 安装成功后...
  • Java历险记

    2020-05-08 23:24:19
    Java历险记(一) emmm… 这是我的第一篇博客也是第一次写博客,有点另类的是这篇博客我并不是...可能我刚好需要叭。 其实这个行业给我的感受就是特别枯燥乏味,甚至有点惨的是我连自己平常的一些兴趣爱好都没有办法
  • 如果你刚好想看这本书或者还没有时间去浏览,可以先看下的概要总结再带着问题去阅读,可能会有意想不到的阅读体验。 MySQL 数据库常见的几种存储引擎; 数据库运行原理:包括数据库架构,如何运转,数据库的后台...
  • 二进制文件修改器AXMLEditor改进

    千次阅读 2019-12-18 11:51:22
    一、 背景介绍 AXMLEditor是尼古拉斯·赵四开源的的AndroidManifest ARSC二进制文件修改器,可...工作过程中,我刚好需要添加应用资源类型的属性,于是在此记录我的解决过程。 “当然这里还是有些操作不支持的,比...
  • 使用swix反编译swf文件修改版权

    千次阅读 2013-03-28 16:54:24
    在查找swf反编译工具时,找到它.一般文件保存时都是经过某种编码的,如果把步骤反过来...反编译后看了一下,某些资源它是能够还原出来了,如我刚好需要修改的版本图片,这样可以替换图片,或是修改大小都可以.达到需求即可.
  • MSN的软肋

    2019-09-26 19:44:24
    2006年12月27日,中国的MSN用户,有精力的一个莫名其妙的日子。MSN又上不去了,现在MSN成了许多高端用户的... 我刚好需要和日本的一个客户联系,偏偏这个时候就上不去,现在考虑的是MSN不能登陆了,那我们用什么。毕...
  • 考的英语一,总分是38,刚好过线大家都是关注那些高分的,不过在看来还是要关注一下英语分不高的,因为有时候不仅要有高分的经验也要看一下低分的教训少走一点弯路。下面将说一下对考研英语的理解,希望对...
  • 本资源为java的源码,需要晋级的程序员不要客气,下载下来就能看,当你工作2-3年你就意识到写代码就那麽回事,这个时候你会尝试各种模式,不断的规范自己的代码,不过还是绝的不尽人意,这个时候...刚好我给你提供下。
  • 不过他们都是用python实现的,网上关于MATLAB爬取需要登录的网站资源较少,刚好今天研究了下,在此记录分享。 用的是获取’User-Agent’和 'Cookie’直接请求登录,爬取内容为自己学院的历届就业信息。 1)首先...
  • 对于内部节点的细节需要知道。我能看到的是你这个节点,而不是你的内部节点。 2.float出来的div不占文档流。但是要注意的是:将来没有float的div如果在排版上刚好就在这个float的下面(浮动应该置于最高层),...
  • 程序员编码时需要注意的九点内容

    千次阅读 2018-08-16 22:55:18
    收听京东的胡峰老师的课程《程序员进阶攻略》,其中谈到了编码实现时需要考虑的这几点,虽然自己也在工作中或多或少也会考虑到其中的几点,但是没有一个完整清晰的List浮现,刚好碰到胡峰老师的总结,于是就记录...
  • 团队里需要什么样的人

    千次阅读 2018-04-08 17:28:59
    想写的东西很多,刚好技术部一季度考核正在进行中,期间有挺多感触的,今天就跟大家聊聊这个话题:团队里需要什么样的人 有人会说,团队里当然需要牛人,大牛越多越好。对于这样的观点,前半句认同,后半句不太...
  • 需要同步吗

    2009-06-15 11:44:33
    是这样想的。当同一时刻有多个用户同时查询相同的数据时。此时要查询的数据刚好在缓存中没有。那么这时要从数据库中读取。假设A查询时执行的到的代码为:List conInfoList = new ArrayList();而B查询执行到代码为:...
  • 心,刚好在js中,的这种习惯就被颠覆了,下面就看看哪些运算符颠覆了的三观。 一:==运算符  ==运算符之所以可以颠覆,可以从下面几个例子中看出来。 <1> “10”==10 ?  如果这要是放在C#里面,编译器会毫不...
  • 遇到了这么一个问题,先是网络请求,然后返回的数据中有GST这个字段,在做打折的时候需要这个字段的值,可是有一个json串就刚好没有这个字段,于是就没法网络请求,程序不走,后来终于解决了 红框完美的解决...
  • jenkinsPublish over SSH 需要配置不同服务器私钥咋办? 之前配置过Publish over SSH把打包后的应用部署到远程服务器上,每个服务器都需要配置私钥...刚好找到了方法了。 点击高级,然后把“Use password authen..
  • 我们的流媒体服务器可以接入多路网络摄像机,那么可能有人问了:假如拥有了一台可以接入16路摄像头的流媒体服务器,但是只有5路摄像头需要接,那么剩下空的路数应该怎么处理呢? 你说巧不巧,今天刚好就有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,869
精华内容 1,147
关键字:

我刚好需要