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

用dw做购票网站中国建设教育协会网站查询

用dw做购票网站,中国建设教育协会网站查询,免费自建 响应式 网站,wordpress 页面 文章 区别声明#xff1a;本文是《 Java 7 Concurrency Cookbook 》的第二章#xff0c;作者#xff1a; Javier Fernndez Gonzlez 译者#xff1a;许巧辉 校对#xff1a;方腾飞 在同步的类里安排独立属性 当你使用synchronized关键字来保护代码块时#xff0c;你必须通过一… 声明本文是《 Java 7 Concurrency Cookbook 》的第二章作者 Javier Fernández González     译者许巧辉  校对方腾飞 在同步的类里安排独立属性 当你使用synchronized关键字来保护代码块时你必须通过一个对象的引用作为参数。通常你将会使用this关键字来引用执行该方法的对象但是你也可以使用其他对象引用。通常情况下这些对象被创建只有这个目的。比如你在一个类中有被多个线程共享的两个独立属性。你必须同步访问每个变量如果有一个线程访问一个属性和另一个线程在同一时刻访问另一个属性这是没有问题的。 在这个指南中你将学习如何解决这种情况的一个例子编程模拟一家电影院有两个屏幕和两个售票处。当一个售票处出售门票它们用于两个电影院的其中一个但不能用于两个所以在每个电影院的免费席位的数量是独立的属性。 准备工作 这个指南的例子使用Eclipse IDE实现。如果你使用Eclipse或其他IDE如NetBeans打开它并创建一个新的Java项目。 如何做… 按以下步骤来实现的这个例子: 1.创建一个Cinema类添加两个long类型的属性命名为vacanciesCinema1和vacanciesCinema2。 public class Cinema { private long vacanciesCinema1; private long vacanciesCinema2; 2.给Cinema类添加两个额外的Object属性命名为controlCinema1和controlCinema2。 private final Object controlCinema1, controlCinema2; 3.实现Cinema类的构造方法初始化所有属性。 public Cinema(){ controlCinema1new Object(); controlCinema2new Object(); vacanciesCinema120; vacanciesCinema220; } 4.实现sellTickets1()方法当第一个电影院出售一些门票将调用它。使用controlCinema1对象来控制访问synchronized的代码块。 public boolean sellTickets1 (int number) { synchronized (controlCinema1) { if (numbervacanciesCinema1) { vacanciesCinema1-number; return true; } else { return false; } } } 5.实现sellTickets2()方法当第二个电影院出售一些门票将调用它。使用controlCinema2对象来控制访问synchronized的代码块。 public boolean sellTickets2 (int number) { synchronized (controlCinema2) { if (numbervacanciesCinema2) { vacanciesCinema2-number; return true; } else { return false; } } } 6.实现returnTickets1()方法当第一个电影院被退回一些票时将调用它。使用controlCinema1对象来控制访问synchronized的代码块。 public boolean returnTickets1 (int number) { synchronized (controlCinema1) { vacanciesCinema1number; return true; } } 7.实现returnTickets2()方法当第二个电影院被退回一些票时将调用它。使用controlCinema2对象来控制访问synchronized的代码块。 public boolean returnTickets2 (int number) { synchronized (controlCinema2) { vacanciesCinema2number; return true; } } 8.实现其他两个方法用来返回每个电影院空缺位置的数量。 public long getVacanciesCinema1() { return vacanciesCinema1; } public long getVacanciesCinema2() { return vacanciesCinema2; } 9.实现TicketOffice1类并指定它实现Runnable接口。 public class TicketOffice1 implements Runnable { 10.声明一个Cinema对象并实现该类类TicketOffice1的构造器用来初始化这个对象。 private Cinema cinema; public TicketOffice1 (Cinema cinema) { this.cinemacinema; } 11.实现run()方法用来模拟在两个电影院的一些操作。 Override public void run() { cinema.sellTickets1(3); cinema.sellTickets1(2); cinema.sellTickets2(2); cinema.returnTickets1(3); cinema.sellTickets1(5); cinema.sellTickets2(2); cinema.sellTickets2(2); cinema.sellTickets2(2); } 12.实现TicketOffice2类并指定它实现Runnable接口。 public class TicketOffice2 implements Runnable { 13.声明一个Cinema对象并实现该类类TicketOffice2的构造器用来初始化这个对象。 private Cinema cinema; public TicketOffice2 (Cinema cinema) { this.cinemacinema; } 14.实现run()方法用来模拟在两个电影院的一些操作。 Override public void run() { cinema.sellTickets2(2); cinema.sellTickets2(4); cinema.sellTickets1(2); cinema.sellTickets1(1); cinema.returnTickets2(2); cinema.sellTickets1(3); cinema.sellTickets2(2); cinema.sellTickets1(2); } 15.通过创建类名为Main且包括main方法来实现这个示例的主类。 public class Main { public static void main(String[] args) { 16.声明和创建一个Cinema对象。 Cinema cinemanew Cinema(); 17.创建一个TicketOffice1对象并且用线程来运行它。 TicketOffice1 ticketOffice1new TicketOffice1(cinema); Thread thread1new Thread(ticketOffice1,TicketOffice1); 18.创建一个TicketOffice2对象并且用线程来运行它。 TicketOffice2 ticketOffice2new TicketOffice2(cinema); Thread thread2new Thread(ticketOffice2,TicketOffice2); 19.启动这两个线程。 thread1.start(); thread2.start(); 20.等待线程执行完成。 try { thread1.join(); thread2.join(); } catch (InterruptedException e) { e.printStackTrace(); } 21.两个电影院的空缺数写入控制台。 System.out.printf(Room 1 Vacancies: %d\n,cinema.getVacanciesCinema1()); System.out.printf(Room 2 Vacancies: %d\n,cinema.getVacanciesCinema2()); 它是如何工作的… 当你使用synchronized关键字来保护代码块你使用一个对象作为参数。JVM可以保证只有一个线程可以访问那个对象保护所有的代码块请注意我们总是谈论的对象而不是类。 注释在这个示例中我们用一个对象来控制vacanciesCinema1属性的访问。所以在任意时刻只有一个线程能修改该属性。用另一个对象来控制 vacanciesCinema2属性的访问。所以在任意时刻只有一个线程能修改这个属性。但是可能有两个线程同时运行一个修改 vacancesCinema1属性而另一个修改vacanciesCinema2属性。 当你运行这个示例你可以看到每个电影院的空缺数量的最后的结果总是预期的。在以下截图中你可以看到应用程序的执行结果 不止这些… synchronize关键字还有其他重要用法请见其他指南中解释这个关键字使用的参见部分。 参见 在第2章基本线程同步中在同步代码中使用条件的指南。 文章转自 并发编程网-ifeve.com
http://www.zqtcl.cn/news/189169/

相关文章:

  • 新网站外链怎么做陕西省煤炭建设第一中学官方网站
  • 学校网站建设方面汇报php网站开发和部署
  • 源码建站和模板建站区别商城网站功能
  • 临沂建站公司互联网开网站怎么做
  • 有哪个网站做ic购物网站建设需求
  • 怎么登录甘肃省建设厅网站工信部域名信息备案管理系统查询
  • 怎么才能免费建网站网站套利怎么做
  • .win域名做网站怎么样邯郸的互联网公司
  • 企业网站建设推广实训报告网站目录
  • 找做课件的网站网站建设柒首先金手指9
  • 秦皇岛网站建设公司wordpress百度编辑器
  • 潍坊网站建设联系方式农业网站开发
  • 河北网站制作网站设计依赖于什么设计
  • 深圳网站优化培训wordpress内页关键词
  • 上栗网站建设企业网站建设报价方案
  • 广州网站开发公司公司级别网站开发
  • 做网站备案哪些条件怎样选择网站的关键词
  • 有没有专门做名片的网站忘记网站后台账号
  • 重庆建设工程招标网站印尼建设银行网站
  • 什么是网站流量优化四川住房建设厅网站
  • 现在还有企业做网站吗做百度推广送的网站
  • 公司年前做网站好处互联网推广运营是做什么的
  • 公司网站建设杭州钓鱼网站制作的报告
  • 宁海有做网站的吗网络规划设计师需要掌握哪些
  • 百度云注册域名可以做网站明码有了主机如何做网站
  • 门户网站推广方案连云港市电信网站建设
  • 网站程序如何制作app商城开发价格
  • 用易语言做攻击网站软件国药控股北京有限公司
  • 宁津 做网站湛江招聘网最新招聘
  • 网站建设优化服务器asp企业网站