仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1176|回复: 19
打印 上一主题 下一主题

[学习教程] 了解下JAVA的线程的优先级

[复制链接]
因胸联盟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:35:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
net网页编程程序员的大部门代码都靠控件拖拽完成的,虽然java也有,但是无论从美观和速度上都没发和.net网页编程比。java程序员都是代码完成的,所以java程序员常戏称.net网页编程程序员是操作员,呵呵。
线程的优先级(Priority)告知调试程序该线程的主要水平有多年夜。假如有大批线程都被梗塞,都在期待运转,调试程序会起首运转具有最高优先级的谁人线程。但是,这其实不暗示优先级较低的线程不会运转(换言之,不会由于存在优先级而招致逝世锁)。若线程的优先级较低,只不外暗示它被准予运转的时机小一些罢了。
可用getPriority()办法读取一个线程的优先级,并用setPriority()改动它。鄙人面这个程序片中,人人会发明计数器的计数速率慢了上去,由于它们联系关系的线程分派了较低的优先级:
  1. //:Counter5.java
  2. //Adjustingtheprioritiesofthreads
  3. importjava.awt.*;
  4. importjava.awt.event.*;
  5. importjava.applet.*;
  6. classTicker2extendsThread{
  7. privateButton
  8. b=newButton("Toggle"),
  9. incPriority=newButton("up"),
  10. decPriority=newButton("down");
  11. privateTextField
  12. t=newTextField(10),
  13. pr=newTextField(3);//Displaypriority
  14. privateintcount=0;
  15. privatebooleanrunFlag=true;
  16. publicTicker2(Containerc){
  17. b.addActionListener(newToggleL());
  18. incPriority.addActionListener(newUpL());
  19. decPriority.addActionListener(newDownL());
  20. Panelp=newPanel();
  21. p.add(t);
  22. p.add(pr);
  23. p.add(b);
  24. p.add(incPriority);
  25. p.add(decPriority);
  26. c.add(p);
  27. }
  28. classToggleLimplementsActionListener{
  29. publicvoidactionPerformed(ActionEvente){
  30. runFlag=!runFlag;
  31. }
  32. }
  33. classUpLimplementsActionListener{
  34. publicvoidactionPerformed(ActionEvente){
  35. intnewPriority=getPriority()+1;
  36. if(newPriority>Thread.MAX_PRIORITY)
  37. newPriority=Thread.MAX_PRIORITY;
  38. setPriority(newPriority);
  39. }
  40. }
  41. classDownLimplementsActionListener{
  42. publicvoidactionPerformed(ActionEvente){
  43. intnewPriority=getPriority()-1;
  44. if(newPriority<Thread.MIN_PRIORITY)
  45. newPriority=Thread.MIN_PRIORITY;
  46. setPriority(newPriority);
  47. }
  48. }
  49. publicvoidrun(){
  50. while(true){
  51. if(runFlag){
  52. t.setText(Integer.toString(count++));
  53. pr.setText(
  54. Integer.toString(getPriority()));
  55. }
  56. yield();
  57. }
  58. }
  59. }
  60. publicclassCounter5extendsApplet{
  61. privateButton
  62. start=newButton("Start"),
  63. upMax=newButton("IncMaxPriority"),
  64. downMax=newButton("DecMaxPriority");
  65. privatebooleanstarted=false;
  66. privatestaticfinalintSIZE=10;
  67. privateTicker2[]s=newTicker2[SIZE];
  68. privateTextFieldmp=newTextField(3);
  69. publicvoidinit(){
  70. for(inti=0;i<s.length;i++)
  71. s[i]=newTicker2(this);
  72. add(newLabel("MAX_PRIORITY="
  73. +Thread.MAX_PRIORITY));
  74. add(newLabel("MIN_PRIORITY="
  75. +Thread.MIN_PRIORITY));
  76. add(newLabel("GroupMaxPriority="));
  77. add(mp);
  78. add(start);
  79. add(upMax);add(downMax);
  80. start.addActionListener(newStartL());
  81. upMax.addActionListener(newUpMaxL());
  82. downMax.addActionListener(newDownMaxL());
  83. showMaxPriority();
  84. //Recursivelydisplayparentthreadgroups:
  85. ThreadGroupparent=
  86. s[0].getThreadGroup().getParent();
  87. while(parent!=null){
  88. add(newLabel(
  89. "Parentthreadgroupmaxpriority="
  90. +parent.getMaxPriority()));
  91. parent=parent.getParent();
  92. }
  93. }
  94. publicvoidshowMaxPriority(){
  95. mp.setText(Integer.toString(
  96. s[0].getThreadGroup().getMaxPriority()));
  97. }
  98. classStartLimplementsActionListener{
  99. publicvoidactionPerformed(ActionEvente){
  100. if(!started){
  101. started=true;
  102. for(inti=0;i<s.length;i++)
  103. s[i].start();
  104. }
  105. }
  106. }
  107. classUpMaxLimplementsActionListener{
  108. publicvoidactionPerformed(ActionEvente){
  109. intmaxp=
  110. s[0].getThreadGroup().getMaxPriority();
  111. if(++maxp>Thread.MAX_PRIORITY)
  112. maxp=Thread.MAX_PRIORITY;
  113. s[0].getThreadGroup().setMaxPriority(maxp);
  114. showMaxPriority();
  115. }
  116. }
  117. classDownMaxLimplementsActionListener{
  118. publicvoidactionPerformed(ActionEvente){
  119. intmaxp=
  120. s[0].getThreadGroup().getMaxPriority();
  121. if(--maxp<Thread.MIN_PRIORITY)
  122. maxp=Thread.MIN_PRIORITY;
  123. s[0].getThreadGroup().setMaxPriority(maxp);
  124. showMaxPriority();
  125. }
  126. }
  127. publicstaticvoidmain(String[]args){
  128. Counter5applet=newCounter5();
  129. FrameaFrame=newFrame("Counter5");
  130. aFrame.addWindowListener(
  131. newWindowAdapter(){
  132. publicvoidwindowClosing(WindowEvente){
  133. System.exit(0);
  134. }
  135. });
  136. aFrame.add(applet,BorderLayout.CENTER);
  137. aFrame.setSize(300,600);
  138. applet.init();
  139. applet.start();
  140. aFrame.setVisible(true);
  141. }
  142. }///:~
复制代码
Ticker接纳本章后面机关好的情势,但有一个分外的TextField(文本字段),用于显现线程的优先级;和两个分外的按钮,用于工资进步及下降优先级。
也要注重yield()的用法,它将把持权主动前往给调试程序(机制)。若不举行如许的处置,多线程机制仍会事情,但我们会发明它的运转速率慢了上去(尝尝删往对yield()的挪用)。亦可挪用sleep(),但倘使那样做,计数频次就会改由sleep()的延续工夫把持,而不是优先级。
Counter5中的init()创立了由10个Ticker2组成的一个数组;它们的按钮和输出字段(文本字段)由Ticker2构建器置进窗体。Counter5增添了新的按钮,用于启动统统,和用于进步和下降线程组的最年夜优先级。除此之外,另有一些标签用于显现一个线程能够接纳的最年夜及最小优先级;和一个特别的文本字段,用于显现线程组的最年夜优先级(鄙人一节里,我们将周全会商线程组的成绩)。最初,父线程组的优先级也作为标签显现出来。
按下“up”(上)或“down”(下)按钮的时分,会先获得Ticker2以后的优先级,然后响应地进步大概下降。
运转该程序时,我们可注重到几件事变。起首,线程组的默许优先级是5。即便在启动线程之前(大概在创立线程之前,这请求对代码举行得当的修正)将最年夜优先级降到5以下,每一个线程城市有一个5的默许优先级。
最复杂的测试是猎取一个计数器,将它的优先级下降至1,此时应察看到它的计数频次明显加快。如今试着再次进步优先级,能够降低回线程组的优先级,但不克不及再高了。如今将线程组的优先级下降两次。线程的优先级不会改动,但倘使试图进步大概下降它,就会发明这个优先级主动酿成线程组的优先级。别的,新线程仍旧具有一个默许优先级,即便它比组的优先级还要高(换句话说,不要期望使用组优先级来避免新线程具有比现有的更高的优先级)。
最初,试着进步组的最年夜优先级。能够发明,如许做是没无效果的。我们只能削减线程组的最年夜优先级,而不克不及增年夜它。
java比较简单,没有C++的烦琐,但学习时最好有C++为基础.与JSP和SQL起应用,功能强大.
admin 该用户已被删除
沙发
发表于 2015-1-21 10:35:03 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
精灵巫婆 该用户已被删除
板凳
发表于 2015-1-24 21:03:21 | 只看该作者
是一种使用者不需花费很多时间学习的语言
深爱那片海 该用户已被删除
地板
发表于 2015-1-25 12:14:09 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
再见西城 该用户已被删除
5#
发表于 2015-1-28 23:17:06 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
莫相离 该用户已被删除
6#
发表于 2015-2-1 10:33:47 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
第二个灵魂 该用户已被删除
7#
发表于 2015-2-1 16:46:31 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
分手快乐 该用户已被删除
8#
发表于 2015-2-5 15:25:05 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
飘灵儿 该用户已被删除
9#
发表于 2015-2-7 07:59:21 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
因胸联盟 该用户已被删除
10#
 楼主| 发表于 2015-2-11 19:41:51 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
11#
发表于 2015-3-2 17:23:09 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
变相怪杰 该用户已被删除
12#
发表于 2015-3-4 19:50:41 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
爱飞 该用户已被删除
13#
发表于 2015-3-11 20:50:08 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
金色的骷髅 该用户已被删除
14#
发表于 2015-3-19 02:49:20 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
若天明 该用户已被删除
15#
发表于 2015-3-23 22:39:06 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
小女巫 该用户已被删除
16#
发表于 2015-4-1 08:08:39 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
山那边是海 该用户已被删除
17#
发表于 2015-4-6 04:09:42 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
只想知道 该用户已被删除
18#
发表于 2015-4-9 13:16:22 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
愤怒的大鸟 该用户已被删除
19#
发表于 2015-4-14 16:19:38 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
老尸 该用户已被删除
20#
发表于 2015-4-16 22:13:19 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 12:33

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表