仓酷云

标题: 来看Java线程间通信概述 [打印本页]

作者: 再现理想    时间: 2015-1-18 11:00
标题: 来看Java线程间通信概述
你希望java的IDE整合。这个是没有必要的,重要的是你理解java有多深以及怎么组织你的代码,即使没有IDE,代码照样能够编译运行的。
这个故事源自一个很复杂的设法:创立一个对开辟职员友爱的、复杂轻量的线程间通信框架,完整不用锁、同步器、旌旗灯号量、守候和关照,在Java里开辟一个轻量、无锁的线程内通信框架;而且也没有行列、动静、事务或任何其他并发公用的术语或工具。
只用一般的老式Java接话柄现POJO的通信。
它大概跟Akka的范例化actor相似,但作为一个必需超等轻量,而且要针对单台多核盘算机举行优化的新框架,谁人大概有点过了。
当actor超过分歧JVM实例(在统一台呆板上,或散布在收集上的分歧呆板上)的历程界限时,Akka框架很擅长处置历程间的通信。
但关于那种只必要线程间通信的小型项目而言,用Akka范例化actor大概有点儿像用牛刀杀鸡,不外类型化actor仍旧是一种幻想的完成体例。
我花了几地利间,用静态代办署理,堵塞行列弛缓存线程池创立了一个办理计划。
图一是这个框架的高条理架构:
来看Java线程间通信概述
登录/注册后可看大图

图一:框架的高条理架构
SPSC行列是指单平生产者/单一消耗者行列。MPSC行列是指多临盆者/单一消耗者行列。
派发线程卖力吸收Actor线程发送的动静,并把它们派发到对应的SPSC行列中往。
吸收到动静的Actor线程用个中的数据挪用响应的actor实例中的办法。借助其他actor的代办署理,actor实例能够将动静发送到MPSC行列中,然后动静会被发送给方针actor线程。
我创立了一个复杂的例子来测试,就是上面这个打乒乓球的程序:
  1. publicinterfacePlayerA(
  2. voidpong(longball);//发完就忘的办法挪用
  3. }
  4. publicinterfacePlayerB{
  5. voidping(PlayerAplayerA,longball);//发完就忘的办法挪用
  6. }
  7. publicclassPlayerAImplimplementsPlayerA{
  8. @Override
  9. publicvoidpong(longball){
  10. }
  11. }
  12. publicclassPlayerBImplimplementsPlayerB{
  13. @Override
  14. publicvoidping(PlayerAplayerA,longball){
  15. playerA.pong(ball);
  16. }
  17. }
  18. publicclassPingPongExample{
  19. publicvoidtestPingPong(){
  20. //办理器埋没了线程间通信的庞大性
  21. //把持actor代办署理,actor完成和线程
  22. ActorManagermanager=newActorManager();
  23. //在办理器内注册actor完成
  24. manager.registerImpl(PlayerAImpl.class);
  25. manager.registerImpl(PlayerBImpl.class);
  26. //创立actor代办署理。代办署理会将办法挪用转换成外部动静。
  27. //会在线程间发给特定的actor实例。
  28. PlayerAplayerA=manager.createActor(PlayerA.class);
  29. PlayerBplayerB=manager.createActor(PlayerB.class);
  30. for(inti=0;i<1000000;i++){
  31. playerB.ping(playerA,i);
  32. }
  33. }
复制代码
<p>
你总不能说你写框架吧,那无疑会加大工作量,现在大多企业采取的是折中的办法,就是改别人写好的框架,可要改框架,前提是你对这个框架足够的了解,这就更难了。
作者: 山那边是海    时间: 2015-1-20 12:42
[url]http://www.ckuyun.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://www.ckuyun.com[/url]去下,安装上有什么问题,可以到论坛上去提问。
作者: 柔情似水    时间: 2015-1-20 13:49
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
作者: 分手快乐    时间: 2015-1-29 08:28
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
作者: 因胸联盟    时间: 2015-1-31 05:13
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
作者: 谁可相欹    时间: 2015-2-6 17:25
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者: 简单生活    时间: 2015-2-17 16:12
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
作者: admin    时间: 2015-3-5 20:40
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者: 深爱那片海    时间: 2015-3-12 14:50
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
作者: 活着的死人    时间: 2015-3-19 22:54
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2