了解下JAVA的线程的优先级
net网页编程程序员的大部门代码都靠控件拖拽完成的,虽然java也有,但是无论从美观和速度上都没发和.net网页编程比。java程序员都是代码完成的,所以java程序员常戏称.net网页编程程序员是操作员,呵呵。线程的优先级(Priority)告知调试程序该线程的主要水平有多年夜。假如有大批线程都被梗塞,都在期待运转,调试程序会起首运转具有最高优先级的谁人线程。但是,这其实不暗示优先级较低的线程不会运转(换言之,不会由于存在优先级而招致逝世锁)。若线程的优先级较低,只不外暗示它被准予运转的时机小一些罢了。
可用getPriority()办法读取一个线程的优先级,并用setPriority()改动它。鄙人面这个程序片中,人人会发明计数器的计数速率慢了上去,由于它们联系关系的线程分派了较低的优先级:
//:Counter5.java
//Adjustingtheprioritiesofthreads
importjava.awt.*;
importjava.awt.event.*;
importjava.applet.*;
classTicker2extendsThread{
privateButton
b=newButton("Toggle"),
incPriority=newButton("up"),
decPriority=newButton("down");
privateTextField
t=newTextField(10),
pr=newTextField(3);//Displaypriority
privateintcount=0;
privatebooleanrunFlag=true;
publicTicker2(Containerc){
b.addActionListener(newToggleL());
incPriority.addActionListener(newUpL());
decPriority.addActionListener(newDownL());
Panelp=newPanel();
p.add(t);
p.add(pr);
p.add(b);
p.add(incPriority);
p.add(decPriority);
c.add(p);
}
classToggleLimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
runFlag=!runFlag;
}
}
classUpLimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
intnewPriority=getPriority()+1;
if(newPriority>Thread.MAX_PRIORITY)
newPriority=Thread.MAX_PRIORITY;
setPriority(newPriority);
}
}
classDownLimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
intnewPriority=getPriority()-1;
if(newPriority<Thread.MIN_PRIORITY)
newPriority=Thread.MIN_PRIORITY;
setPriority(newPriority);
}
}
publicvoidrun(){
while(true){
if(runFlag){
t.setText(Integer.toString(count++));
pr.setText(
Integer.toString(getPriority()));
}
yield();
}
}
}
publicclassCounter5extendsApplet{
privateButton
start=newButton("Start"),
upMax=newButton("IncMaxPriority"),
downMax=newButton("DecMaxPriority");
privatebooleanstarted=false;
privatestaticfinalintSIZE=10;
privateTicker2[]s=newTicker2;
privateTextFieldmp=newTextField(3);
publicvoidinit(){
for(inti=0;i<s.length;i++)
s=newTicker2(this);
add(newLabel("MAX_PRIORITY="
+Thread.MAX_PRIORITY));
add(newLabel("MIN_PRIORITY="
+Thread.MIN_PRIORITY));
add(newLabel("GroupMaxPriority="));
add(mp);
add(start);
add(upMax);add(downMax);
start.addActionListener(newStartL());
upMax.addActionListener(newUpMaxL());
downMax.addActionListener(newDownMaxL());
showMaxPriority();
//Recursivelydisplayparentthreadgroups:
ThreadGroupparent=
s.getThreadGroup().getParent();
while(parent!=null){
add(newLabel(
"Parentthreadgroupmaxpriority="
+parent.getMaxPriority()));
parent=parent.getParent();
}
}
publicvoidshowMaxPriority(){
mp.setText(Integer.toString(
s.getThreadGroup().getMaxPriority()));
}
classStartLimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
if(!started){
started=true;
for(inti=0;i<s.length;i++)
s.start();
}
}
}
classUpMaxLimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
intmaxp=
s.getThreadGroup().getMaxPriority();
if(++maxp>Thread.MAX_PRIORITY)
maxp=Thread.MAX_PRIORITY;
s.getThreadGroup().setMaxPriority(maxp);
showMaxPriority();
}
}
classDownMaxLimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
intmaxp=
s.getThreadGroup().getMaxPriority();
if(--maxp<Thread.MIN_PRIORITY)
maxp=Thread.MIN_PRIORITY;
s.getThreadGroup().setMaxPriority(maxp);
showMaxPriority();
}
}
publicstaticvoidmain(String[]args){
Counter5applet=newCounter5();
FrameaFrame=newFrame("Counter5");
aFrame.addWindowListener(
newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
aFrame.add(applet,BorderLayout.CENTER);
aFrame.setSize(300,600);
applet.init();
applet.start();
aFrame.setVisible(true);
}
}///:~Ticker接纳本章后面机关好的情势,但有一个分外的TextField(文本字段),用于显现线程的优先级;和两个分外的按钮,用于工资进步及下降优先级。
也要注重yield()的用法,它将把持权主动前往给调试程序(机制)。若不举行如许的处置,多线程机制仍会事情,但我们会发明它的运转速率慢了上去(尝尝删往对yield()的挪用)。亦可挪用sleep(),但倘使那样做,计数频次就会改由sleep()的延续工夫把持,而不是优先级。
Counter5中的init()创立了由10个Ticker2组成的一个数组;它们的按钮和输出字段(文本字段)由Ticker2构建器置进窗体。Counter5增添了新的按钮,用于启动统统,和用于进步和下降线程组的最年夜优先级。除此之外,另有一些标签用于显现一个线程能够接纳的最年夜及最小优先级;和一个特别的文本字段,用于显现线程组的最年夜优先级(鄙人一节里,我们将周全会商线程组的成绩)。最初,父线程组的优先级也作为标签显现出来。
按下“up”(上)或“down”(下)按钮的时分,会先获得Ticker2以后的优先级,然后响应地进步大概下降。
运转该程序时,我们可注重到几件事变。起首,线程组的默许优先级是5。即便在启动线程之前(大概在创立线程之前,这请求对代码举行得当的修正)将最年夜优先级降到5以下,每一个线程城市有一个5的默许优先级。
最复杂的测试是猎取一个计数器,将它的优先级下降至1,此时应察看到它的计数频次明显加快。如今试着再次进步优先级,能够降低回线程组的优先级,但不克不及再高了。如今将线程组的优先级下降两次。线程的优先级不会改动,但倘使试图进步大概下降它,就会发明这个优先级主动酿成线程组的优先级。别的,新线程仍旧具有一个默许优先级,即便它比组的优先级还要高(换句话说,不要期望使用组优先级来避免新线程具有比现有的更高的优先级)。
最初,试着进步组的最年夜优先级。能够发明,如许做是没无效果的。我们只能削减线程组的最年夜优先级,而不克不及增年夜它。
java比较简单,没有C++的烦琐,但学习时最好有C++为基础.与JSP和SQL起应用,功能强大. Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 是一种使用者不需花费很多时间学习的语言 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧! J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧! Java是一种计算机编程语言,拥有跨平台、面向对java 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。 是一种将安全性(Security)列为第一优先考虑的语言 你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
页:
[1]
2