当前位置: 首页 > news >正文

新网站建设渠道教务管理系统官网

新网站建设渠道,教务管理系统官网,百度竞价优缺点,手机wap游戏java 并发 同步信号这是我们将要进行的Java并发系列的第一部分。 具体来说#xff0c;我们将深入研究Java 1.5及更高版本中内置的并发工具。 我们假设您对同步和易失性关键字有基本的了解。 第一篇文章将介绍信号量-特别是对信号量进行计数 。 信号量是用于限制对资源访问的经… java 并发 同步信号 这是我们将要进行的Java并发系列的第一部分。 具体来说我们将深入研究Java 1.5及更高版本中内置的并发工具。 我们假设您对同步和易失性关键字有基本的了解。 第一篇文章将介绍信号量-特别是对信号量进行计数 。 信号量是用于限制对资源访问的经常被误解和使用不足的工具。 对于其他控制资源访问的方式它们将被忽略。 但是信号量为我们提供了一个超越常规同步和其他工具所能提供的工具集的工具集。 那么信号量是什么 想到信号量的最简单方法是将其视为允许n个单位被获取并提供获取和释放机制的抽象。 它安全地使我们能够确保在给定时间只有n个进程可以访问特定资源 。 一切都很好但是这将达到什么目的呢 好吧这是一个示例将有助于解释其用法。 它使用位于1.5。中的java.util.concurrent包中精心设计的Semaphore类。 限制连接 也许我们有一个过程可以通过HTTP定期为我们下载资源。 我们不想向任何主机发送垃圾邮件同时我们想限制正在建立的连接数因此我们不会耗尽允许的有限文件句柄或出站连接。 一种简单的方法是使用信号量 public class ConnectionLimiter {private final Semaphore semaphore;private ConnectionLimiter(int maxConcurrentRequests) {semaphore new Semaphore(maxConcurrentRequests);}public URLConnection acquire(URL url) throws InterruptedException,IOException {semaphore.acquire();return url.openConnection();}public void release(URLConnection conn) {try {/** ... clean up here*/} finally {semaphore.release();}} } 对于资源有限的问题这是一个很好的解决方案。 对acquire的调用将阻塞直到获得许可为止。 信号灯的优点在于它隐藏了管理访问控制计算许可数以及确保正确的线程安全性的所有复杂性。 危险性 与大多数锁定或同步方法一样存在一些潜在问题。 要记住的第一件事是 始终释放您获得的东西 。 这是通过使用try..finally构造完成的。 使用信号量时还有其他不太明显的问题可能会降临您。 以下课程显示了死锁只有您中最幸运的人才能避免。 您会注意到获得两个信号量许可的两个线程的执行顺序相反。 为简洁起见try..finally最终被省去了。 public static void main(String[] args) throws Exception {Semaphore s1 new Semaphore(1);Semaphore s2 new Semaphore(1);Thread t new Thread(new DoubleResourceGrabber(s1, s2));// now reverse them ... here comes trouble!Thread t2 new Thread(new DoubleResourceGrabber(s2, s1));t.start();t2.start();t.join();t2.join();System.out.println(We got lucky!); }private static class DoubleResourceGrabber implements Runnable {private Semaphore first;private Semaphore second;public DoubleResourceGrabber(Semaphore s1, Semaphore s2) {first s1;second s2;}public void run() {try {Thread t Thread.currentThread();first.acquire();System.out.println(t acquired first);Thread.sleep(200); // demonstrate deadlocksecond.acquire();System.out.println(t acquired second);second.release();System.out.println(t released second);first.release();System.out.println(t released first);} catch (InterruptedException ex) {ex.printStackTrace();}} } 如果运行此程序则很有可能会挂起一个进程。 锁定顺序的问题与Java中的常规互斥锁或同步一样也适用于信号量。 在某些情况下超时请参阅本文后面的tryAcquire注释可用于防止死锁导致进程挂起但是死锁通常是可以避免的逻辑错误的征兆。 如果您不熟悉死锁建议您仔细阅读它们。 维基百科上有一篇关于死锁的文章该文章同样适用于所有语言。 使用信号量包括二进制信号量即互斥体时应注意的主要事项是 获取后不释放丢失的释放调用或引发异常并且没有finally块 长信号灯导致线程饥饿 死锁如上所示 有用的信号灯技巧 Java中Semaphores的一个有趣的特性是 发布不必与Acquisition 相同的线程来调用 。 这意味着您可以拥有一个线程限制器该限制器可以通过调用acquire来基于信号量池或创建线程。 然后正在运行的线程可以在完成时释放其自己的信号灯许可。 这是Java中普通互斥锁所没有的有用属性。 另一个技巧是在运行时增加许可数量 。 与您可能会猜到的相反信号量中的许可数量不是固定的并且即使未进行相应的acquire调用对release的调用也会始终增加许可的数量。 请注意如果在没有进行acquire的情况下错误地调用release 这也会导致错误。 最后在Java的Semaphore中有一些有用的方法要熟悉。 方法AcquireInterruptible将获取资源如果资源被中断则重新尝试。 这意味着没有对InterruptedException的外部处理。 tryAcquire方法允许我们限制等待许可的时间–我们可以在没有许可的情况下立即返回或者等待指定的超时时间。 如果您以某种方式知道了无法轻松修复或跟踪的死锁则可以通过使用带有适当超时的tryAcquire来帮助防止锁定进程。 用途 计数信号量有哪些可能的用途 请注意以下几点 限制对磁盘的并发访问由于竞争磁盘搜寻这可能会降低性能 线程创建限制 JDBC连接池/限制 网络连接限制 限制CPU或内存密集型任务 当然信号量是访问控制和同步的一个很底层的构建块。 Java为我们提供了Java 1.5及更高版本中引入的大量并发机制和策略。 在接下来的文章中我们将介绍一些更抽象的并发管理方法包括执行器BlockingQueuesBarriersFuture以及一些新的并发Collection类。 您发现信号量有什么用途 通过发表评论让我们知道–我们喜欢会说话的软件。 参考 Java并发第1部分–来自我们JCG合作伙伴的信号灯 在Carfey Software博客上 。 相关文章 Java并发教程–重入锁 Java并发教程–线程池 Java并发教程–可调用将来 Java并发教程–阻塞队列 Java并发教程– CountDownLatch Exchanger和无GC的Java Java Fork / Join进行并行编程 Java最佳实践–队列之战和链接的ConcurrentHashMap 如何在不到1ms的延迟内完成100K TPS 使用迭代器时如何避免ConcurrentModificationException 改善Java应用程序性能的快速技巧 相关片段 阻塞队列示例以执行命令 信号量示例限制URL连接 执行命令的同步队列示例 更一般的等待/通知机制的CountDownLatch示例 翻译自: https://www.javacodegeeks.com/2011/09/java-concurrency-tutorial-semaphores.htmljava 并发 同步信号
http://www.sadfv.cn/news/30314/

相关文章:

  • 网站建设录哪个科目图片网站怎么做排名
  • 淘宝网官方网站建小网站多少钱
  • 昌平网站建设推广优化seo百度广告投放技巧
  • 企业网站开发毕业报告租一个网站服务器多少钱
  • 注册网站用户名怎么填写php网站建设制作
  • 计算机个人网站建设论文wordpress在页面中调用文章
  • the7做的网站北京网站设计服务
  • 成都微信网站建设报价单企业管理咨询心得体会
  • 如何网站推广策划大连网站建设平台
  • 企业网站cms模板wordpress小程序模版
  • 网站产品整合推广吉林省白山市建设厅网站首页
  • 企业网站的一 二级栏目名称页面设计介绍
  • 通用网站建设需求分析重庆平台网站建设哪家有
  • 济南网站优化建设wordpress做的社交
  • 哈尔滨网站开发需要多少钱深圳电信网络建站
  • 本地营销型网站建设网站商城建设方式
  • 温州微网站制作电话wap网站建设哪家好
  • 江西医疗网站建设无锡制作网站公司哪家好
  • 先做网站后台还是前台wordpress的插件安装
  • 做同城购物网站江西吉安建设监督网站
  • 手机网站后台一套vi设计多少钱
  • wordpress可以建哪些网站吗php 信息分类网站开发
  • 广州新塘网站制作推广天津网站优化哪家最专业
  • 网站开发自荐信房屋装修公司哪家好
  • 本地网站建设需要什么可信网站权威性怎么样
  • 网站根目录文件 seo北京seo优化服务
  • 海北高端网站建设公司灞桥微网站建设
  • react做的电商网站能上线吗网站建设邀标书
  • wordpress发布网站做网站怎么对接国际收款商户
  • 企业网站设计制作服务网站开发语言一般是用什么