利用JAVA多线程并发机制解决生产者-消费者问题

  本文分析并描述了多线程并发过程中的同步机制及消息通信机制的基本原理.探讨如何运用多皇戋程同步机制和消息互通机制切实解决生产者和消费者之间的问题。
  关键词:多线程同步并发生产者消费者中图分类号:311.1文献标识码:文章编号:1002-2422(2010)01国147由33龋氏南-::-,—-.—语言和虚拟机提供了完全意义上的多线程支持,其内传奇散人置语言级的多线程机制让用户更方便地实现多个并行程序的开发,从语言级上提供各个线程间协调工作的调度能力,降低并发程序设计的难度。在中,多线程的建立有两种方法:继承类和实现接。类提供了各种与线程有关的方法,通过继承此类使线程的设计更为方便.本文将采用继承类来实现多线程技术。但是在程序中,所有线程共享同一内存空间,两个或多个线程可能同时访问同一变量或运行同一对象的同一方法,将导致数据访问冲突以及数据前后不一致。这就需要有一种机制来合理地避免此现象。1并发机制的分析同步是指多个线程在一些关键点上的互相等待和互通消息.在中,可采用或类的方法、来实现多线程同步。
  的实现了线程的互斥机制,和可实现线程问的通信。分别解决了数据的一致性和多线程之间的协同合作的问题,从而真正实现了完全意义上的同步。
  1.1基于和的互斥机制并发性的引入,在多线程设计中,为了达到某种实际目的,程序中总会存在着一些不能“同时”被两个以上的线程访问的程序段,即临界区。中利用锁定标志来定义临界区,可以是方法,也可以是代码段。
  在程序中有标志的方法或代码段在任一时刻只能有一个线程可以进入访问,即实现了临界区的互斥访问。这个机制实际上是基于监视和锁的原理,监视器使用锁来防止多线程进入监视器。当一个线程要访问某临界区,该线程必须获得该临界区所属对象的锁,并且“上锁”,每个对象都有自己的锁。当一个线程想使用锁时,先向Ⅳ提出请求,若其他线程使收稿日期:2009-12-16·陈益湖北工业大学理学院讲师(湖北,武汉430068).用着锁,Ⅳ将提出请求的线程暂放在一个等待区域,当监视器内的线程释放锁后,Ⅳ将等待区域中的线程移出获得锁,并进入监视器运行。1.2线程之间数据传输解决了临界区的互斥访问问题,在实际应用中,还会要求线程之间进行协同合作共同完成工作任务,即在对临界区的互斥访问的同时,线程之间还要相互通信和互通消息。比如,广-问题,“生产者”是生产数据的线程,“消费者”是获取数据的线程。
  两个线程的运行既要互斥,同时还要互通消息.两个并行线程共享同一传奇地图个资源:事件队列,在类产生0—9之间的整数,存入到“”对象,显示这个整数,类则快速地消耗从刚得到的整数。和共同访问对象,要将数据安全地交给,但当与在不同线程上运行时;即两者者都没有采取同步招。施,就会有速度差。翻、如当。要取数据时,还没放置新数据,或是-、有新数据时,还没准备好接收新数据等。在和之间加入一个“”(队列),以此来缓冲和之间的处理速度差。会从处接收数据,并保管起来。并应—的要求,将数据传送出去.为了确保安全性,与要对访问进行共享互斥。当将数据传给时,若的状态无法接受数据,这时会在的状态变成可以接受之前,保持等待状态。当从获取数据的时,若没有数据给,这时在可以传送数据之前,保持等待状态.所以介于、之间起到保存数据、传递数据的作用。其通信图如图所示。图1-通信图1.3基于和的通信机制对于上述实际问题,利用的来实现线程的互斥机制,通过和实现线程间的通信。可以解决数据的一致性和多线程之间的协同合作的问题,真正实现了完全意义上的同步大家看。
  为解决多线程之间的消息传递问题,在..类中还提供了三个标准的方法:、和—。
  它们只能在方法(块)中使用,否则运行时产生异常。作用是使当前运行的线程由运行状态转为阻塞状态,进入等待队列中的集中,并且释放锁;的作用是唤醒集中的队首线程(或按照一定的算法来唤醒某个线程),使线程有阻塞状态转为可运行;曲的作用是将所有集中的线程都唤醒。和的配对使用能很好地实现互斥中的通信机制.和-主要用于-这种关系中。2基于完全同步的并发多任务解决和问题构造一个共享缓冲区类,其内有相关的数据属性,为生产数据的方法,用来获取数据的方法。都足同步方法,两个方法内部通过和来实现消息的通信.另构造由类继承而来的两个子类,分别是和,产生两个线程和,实现具体的产生消息和获取消息的操作。具体程序:血(=;=;=;.;.;胜类,为共享对象实例;施建时指定它要放置到哪个队列中.:;哎置了0-9,总共10个数字(=;<;++).;..(”:”+)舸印出具体放置的是哪个数)赃产者类·148·;虎4建时就为它指定相应的队列.=;1..(":。+.);嫦费者类',用来存放数据=.判断队列是否已满用来放置数据(!)=;=;;;.;1桶来获取数据(!蹦1)田;.埘;=;:℃;肚享缓冲区队列类程序运行结果:::::1:9:9如果本游戏地图好强程序中没有和同步方法,那么—将始终都只获取到9这个数,而放置了0~9这10个数值。因为时间片的关系的线程启动运行时它将0-9,共10个数值都放置到队列当中了,等到—开始运行时,只看到9这个数.所以在放置数据之后,应该让等待,等到从队列中获取了数据之后,在继续往队列中放置数据.-在放置了数据之后,利用方法让它等待。-获取数据之后,利用曲方法唤醒继续往队列中放置数据。程序中的和都为同步方法,拥有同步方法的类对象有唯一一个监视器。当调用类的方法,获得监视器,防止—2010年2月电脑学习第1期浅议2009计算功能王文才王瑞智刘海2009软件为用户提供了强大的计算功能。用户可以通过计算实现计算点和数值、计算图形面积、测量图形之间的距离和角度、显示图形坐标和定位点、查询时间、状态和列袁显示命令等。
  本文通过一些实际例子.详细介绍—2009计算功能的设置及按作方法。关键词:2009计算功能图形中图分类号:319文献标识码:文章编号:1002-2422(2010)01-0149-032009::2009.-,,-,-,.200950℃.20092009软件是公司开发的一种大型计算机辅助绘图软件,功能强大,性能稳定,广泛应用于建筑、机械等设计领域.同时2009软件也为用户提供了强大的计算功能,但却不为广大用户熟悉。本文通过一些实例,详细介绍2009计算功能的设置及操作方法,希望有助于2009软件用户提高绘图效率和准确性,加快2009软件在各行各业推广和应用。1计算点和数值工程设计中,通常需要快速解答数学问题或确定图形中点的位置。在2009软件中,可直接在命令行调用“”命令,或在其他命令执行过程中透明地调用该命令。通过“”命令,可以实现标准的计算器功能、求解向量表达式、实数表达式和整数表达式。1.1计算点“”命令是透明命令,可以在其它命令运行过程中调用该命令。例:已知直线12和一圆,画四边形1234,3为2与圆心连线的中点,4为与圆心连线的中点,如图1所示。调用类的方法,这就是锁定.只有必须是同一个对象的等待队列,即调用方法将一个线方法返回,释放监视器,才解锁对象。
  同理,程放入一个对象的等待队列之后,相应的调用曲方法也当调用类的方法时,获得应该是从同一个对象的等待队列当中删除线程。
  监视器,防止调用类的方法。这样保3结束语证与两个线程的同步运行,程序运行后多线程可以合理地调配多个任务。技术功能强大.但有结果正常,即生产一个数据就消费一个多个线程共享数据或存储结构时会产生执行结果的不确玩家爽数据。
  类中的方法和方法都采用了定,因此利用提供的同步机制控制线程之间互通消息方法和曲方法进行同步.若。没有新数,的运行进度,避免数据不一致性、数据冲突等并发问题。不:,调用方法的,线程进入状仅缩短并行任务的执行时间,提高运行效率,获得高质量的态,等线程放好数后,:,并用方多线程并发程序·同时为用户编程提供了解决实际问法唤醒来取数。
  若线程没有取走数,趔删策旮·=,调用方法的线程进入等待状态,线程取走数后,则=,并用曲-方法唤醒继续放置新数。特别需要注意的是,调用方法时是将线程放在对象的等待队列中,对于同步方法使用的是对象的监视器,方法使用的是对象的等待队列。方法和方法使用的是同一个对象。
  使用方法和方法时参考文献11耿祥义.2实用教程.北京:清华大学出版社,2008.2胡忠.多线程机制的研究与实践.达州:达县师范高等专科学校学报,2003(2).3王金海,江务学.基于多线程的并发机制的研究和实现.西安:微机发展,2004(3).4贾兰兰.剖析语言的多线程.天津:信息系统工程,2—009(6).收稿日期:2009—12—28·王文才内蒙古科技大学资源与安全工程学院教授(内蒙古,包头014000)。·149·利用多线程并发机制解决生产者-消费者问题作者:陈益,作者单位:湖北工业大学理学院,湖北,武汉,430068刊名:电脑学习英文刊名:年,卷(期):2010(1)参考文献(4条)1.贾兰兰剖析语言的多线程[期刊论文]-信息系统工程2009(06)2.王金海;江务学基于多线程的并发机制的研究和实现[期刊论文]-微机发展2004(03)3.胡忠多线程机制的研究与实践[期刊论文]-达县师范高等专科学校学报2003(02)4.耿祥义2实用教程2008。

上一篇:基于ASP的用户身份鉴别
下一篇:利用拨号网络实现计算机的远程连接

  • 天下大乱荣耀满地风暴狂暴虎威好暴一键高价回www.667uu.cn-合击中变
  • 1.85国战高歌免费连击,送倚天送顶级送会员送特戒www.gg400.com-1.85国战
  • 1.85辉煌版连,2010新升级虎威装备好打不www.sf9191.com-君临炎龙
  • 新粉色连击重金广告海量宣传末日武圣长久开放www.xinnianmirs.com-君临
  • 神威1.85血雨腥风,1.85金牛火牛血牛尽在魔龙炎龙终极散人www.kisspk.com-汽车内挂桌
  • 神祭祀宝经典复古1.76,三年老站,不卖装备等级一www.fugu76.com-神龙正版
  • 还谬到到辉煌连击一区,15级技能无双阁天地裂痕boss之家-www.ws1959.com-叶问一区
  • 1.999至尊1.76赤月精品版本烟花神泣终极www.pk1768.com-霸气倚天
  • 185幻神道道合击牛.无道盾最经典版本www.sf0116.com.cn-火龙版私服
  • 1.85国站道士加强2白虎装备拆解元素属性内挂www.qzeee.com-元神