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

丹东网站优化苏州哪个网站建设最好

丹东网站优化,苏州哪个网站建设最好,盐城seo网站优化,大连网站设计菲尔莱斯声明#xff1a;本文是《 Java 7 Concurrency Cookbook 》的第八章#xff0c; 作者#xff1a; Javier Fernndez Gonzlez 译者#xff1a;郑玉婷 校对#xff1a;方腾飞 监控Lock接口 Lock 接口是Java 并发 API提供的最基本的机制来同步代码块。它允许定义临界区。临界… 声明本文是《 Java 7 Concurrency Cookbook 》的第八章 作者 Javier Fernández González 译者郑玉婷   校对方腾飞 监控Lock接口 Lock 接口是Java 并发 API提供的最基本的机制来同步代码块。它允许定义临界区。临界区是代码块可以共享资源但是不能被多个线程同时执行。此机制是通过Lock 接口和 ReentrantLock 类实现的。 在这个指南你将学习从Lock对象可以获取的信息和如何获取这些信息。 准备 指南中的例子是使用Eclipse IDE 来实现的。如果你使用Eclipse 或者其他的IDE例如NetBeans, 打开并创建一个新的java项目。 怎么做呢… 按照这些步骤来实现下面的例子 001 package tool; 002  003 import java.util.Collection; 004 import java.util.concurrent.TimeUnit; 005 import java.util.concurrent.locks.Lock; 006 import java.util.concurrent.locks.ReentrantLock; 007  008//1.   创建一个类名为 MyLock 扩展 ReentrantLock 类。 009 public class MyLock extends ReentrantLock { 010  011     // 2. 实现 getOwnerName() 方法。此方法使用Lock类的保护方法 getOwner() 返回控制锁的线程如果存在的名字。 012     public String getOwnerName() { 013         if (this.getOwner() null) { 014             return None; 015         } 016         return this.getOwner().getName(); 017     } 018  019     // 3. 实现 getThreads() 方法。此方法使用Lock类的保护方法 getQueuedThreads()返回在锁里的线程的 queued 020     // list。 021     public CollectionThread getThreads() { 022         return this.getQueuedThreads(); 023     } 024  025     // 4. 创建一个类名为 Task实现 Runnable 接口. 026     public class Task implements Runnable { 027  028         // 5. 声明一个私有 Lock 属性名为 lock。 029         private Lock lock; 030  031         // 6. 实现类的构造函数初始化它的属性值。 032         public Task(Lock lock) { 033             this.lock lock; 034         } 035  036         // 7. 实现 run() 方法。创建迭代5次的for循环。 037         Override 038         public void run() { 039             for (int i 0; i 5; i) { 040  041                 // 8. 使用lock()方法获取锁并打印一条信息。 042                 lock.lock(); 043                 System.out.printf(%s: Get the Lock.\n, Thread.currentThread() 044                         .getName()); 045  046                 // 9. 让线程休眠 500 毫秒。使用 unlock() 释放锁并打印一条信息。 047                 try { 048                     TimeUnit.MILLISECONDS.sleep(500); 049                     System.out.printf(%s: Free the Lock.\n, Thread 050                             .currentThread().getName()); 051                 } catch (InterruptedException e) { 052                     e.printStackTrace(); 053                 } finally { 054                     lock.unlock(); 055                 } 056             } 057         } 058     } 059  060     // 10. 创建例子的主类通过创建一个类名为 Main 并添加 main()方法。 061     public static void main(String[] args) throws Exception { 062  063         // 11. 创建 MyLock 对象名为 lock。 064         MyLock lock new MyLock(); 065  066         // 12. 创建有5个Thread对象的 array。 067         Thread threads[] new Thread[5]; 068  069         // 13. 创建并开始5个线程来执行5个Task对象。 070         for (int i 0; i 5; i) { 071             Task task lock.new Task(lock); 072             threads[i] new Thread(task); 073             threads[i].start(); 074         } 075  076         // 14. 创建迭代15次的for循环。 077         for (int i 0; i 15; i) { 078  079             // 15. 把锁的拥有者的名字写入操控台。 080             System.out.printf(Main: Logging the Lock\n); 081             System.out.printf(************************\n); 082             System.out.printf(Lock: Owner : %s\n, lock.getOwnerName()); 083  084             // 16. 显示锁queued的线程的号码和名字。 085             System.out.printf(Lock: Queued Threads: %s\n, 086                     lock.hasQueuedThreads()); // 译者注加上 System 087             if (lock.hasQueuedThreads()) { 088                 System.out.printf(Lock: Queue Length: %d\n, 089                         lock.getQueueLength()); 090                 System.out.printf(Lock: Queued Threads: ); 091                 CollectionThread lockedThreads lock.getThreads(); 092                 for (Thread lockedThread : lockedThreads) { 093                     System.out.printf(%s , lockedThread.getName()); 094                 } 095                 System.out.printf(\n); 096             } 097  098             // 17. 显示关于Lock对象的公平性和状态的信息。 099             System.out.printf(Lock: Fairness: %s\n, lock.isFair()); 100             System.out.printf(Lock: Locked: %s\n, lock.isLocked()); 101             System.out.printf(************************\n); 102  103             // 18. 让线程休眠1秒并合上类的循环。 104             TimeUnit.SECONDS.sleep(1); 105         } 106     } 107} 它是如何工作的… 在这个指南里你实现的MyLock类扩展了ReentrantLock类来返回信息除此之外获得不到这些信息 因为ReentrantLock 类里的数据都是保护类型的。 通过MyLock类实现的方法 getOwnerName()只有唯一一个线程可以执行被Lock对象保护的临界区。锁存储了正在执行临界区的线程。此线程会被ReentrantLock类的保护方法 getOwner()返回。 此方法使用 getOwner() 方法来返回线程的名字。getThreads()当线程正在执行临界区时其他线程尝试进入临界区就会被放到休眠状态一直到他们可以继续执行为止。ReentrantLock类保护方法getQueuedThreads() 返回 正在等待执行临界区的线程list。此方法返回 getQueuedThreads() 方法返回的结果。我们还使用了 ReentrantLock 类里实现的其他方法 hasQueuedThreads():此方法返回 Boolean 值表明是否有线程在等待获取此锁getQueueLength(): 此方法返回等待获取此锁的线程数量isLocked(): 此方法返回 Boolean 值表明此锁是否为某个线程所拥有isFair(): 此方法返回 Boolean 值表明锁的 fair 模式是否被激活更多… ReentrantLock 类还有其他方法也是用来获取Lock对象的信息的 getHoldCount(): 返回当前线程获取锁的次数isHeldByCurrentThread(): 返回 Boolean 值表明锁是否为当前线程所拥有
http://www.zqtcl.cn/news/963194/

相关文章:

  • 淄博个人网站建设天津网站制作机玩法部
  • 帮人做图挣外快的网站seo优化教学视频
  • 做房产中介需要有内部网站吗烟台开发区网站建设
  • 网站资质优化网站备案密码使用
  • 廊坊营销网站团队网站推广报告
  • 商品网站模板多语言企业网站模板
  • 佛山网页制作设计东莞seo推广机构帖子
  • 公司网站开发费用如何入账网站开发与设计实训总结两千字
  • 生物网站模板在线crm厂商
  • 在线制作动画网站ps切图做网站
  • 西安企业网站建设公司虚拟主机可以做视频网站嘛
  • 做淘客网站用什么程序今天杭州新闻最新消息
  • 东莞专业建网站网站制作方案相信乐云seo
  • 网站分页符素材怎么解决
  • 行远金华网站建设公司合肥公司做网站
  • 餐厅类网站模板中国电建市政建设集团有限公司网站
  • 格力网站建设首页六盘水遵义网站建设怎么做
  • 建设工程企业资质工作网站创建网站怎么赚钱的
  • 三水网站建设流感吃什么药最好
  • 洛阳市住房和城乡建设局网站怎么查询企业注册信息
  • 商业摄影网站源码wordpress文章作者
  • 昆明企业网站模板建站漳浦建设局网站更新
  • 企业网站建设策划书微信开发者工具是干嘛的
  • 泵 品牌网站建设WordPress头像不能本地化
  • vue快速建站网站开发法律
  • 家居行业网站开发百度竞价推广账户
  • 粉色大气妇科医院网站源码百度网址大全网址
  • wordpress 留言墙插件优化网站搭建
  • 优秀设计师网站芯片设计公司
  • 铜陵网站建设公司wordpress密码访问插件