|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
C++编译的是本地码,优点是启动快,而且可以精确控制资源因此可以开发很高效的程序.缺点是编程麻烦,而且容易留下安全隐患.跨平台靠源代码在各个平台间分别编译(一处编写到处编译)
在本章早些时分,我曾倡议人人在将一个程序片或主Frame看成Runnable的完成情势之前,必定要好好地想想。若接纳那种体例,就只能在本人的程序中利用个中的一个线程。这便限定了天真性,一旦必要用到属于那品种型的多个线程,就会碰到不用要的贫苦。
固然,假如必需从一个类承继,并且想使类具有线程处置才能,则Runnable是一种准确的计划。本章最初一个例子对这一点举行了分析,制造了一个RunnableCanvas类,用于为本人刻画分歧的色彩(Canvas是“画布”的意义)。这个使用被计划成从命令行取得参数值,以决意色彩网格有多年夜,和色彩产生变更之间的sleep()有多长。经由过程使用这些值,人人能体验到线程一些风趣并且大概使人隐晦的特征:- //:ColorBoxes.java
- //UsingtheRunnableinterface
- importjava.awt.*;
- importjava.awt.event.*;
- classCBoxextendsCanvasimplementsRunnable{
- privateThreadt;
- privateintpause;
- privatestaticfinalColor[]colors={
- Color.black,Color.blue,Color.cyan,
- Color.darkGray,Color.gray,Color.green,
- Color.lightGray,Color.magenta,
- Color.orange,Color.pink,Color.red,
- Color.white,Color.yellow
- };
- privateColorcColor=newColor();
- privatestaticfinalColornewColor(){
- returncolors[
- (int)(Math.random()*colors.length)
- ];
- }
- publicvoidpaint(Graphicsg){
- g.setColor(cColor);
- Dimensions=getSize();
- g.fillRect(0,0,s.width,s.height);
- }
- publicCBox(intpause){
- this.pause=pause;
- t=newThread(this);
- t.start();
- }
- publicvoidrun(){
- while(true){
- cColor=newColor();
- repaint();
- try{
- t.sleep(pause);
- }catch(InterruptedExceptione){}
- }
- }
- }
- publicclassColorBoxesextendsFrame{
- publicColorBoxes(intpause,intgrid){
- setTitle("ColorBoxes");
- setLayout(newGridLayout(grid,grid));
- for(inti=0;i<grid*grid;i++)
- add(newCBox(pause));
- addWindowListener(newWindowAdapter(){
- publicvoidwindowClosing(WindowEvente){
- System.exit(0);
- }
- });
- }
- publicstaticvoidmain(String[]args){
- intpause=50;
- intgrid=8;
- if(args.length>0)
- pause=Integer.parseInt(args[0]);
- if(args.length>1)
- grid=Integer.parseInt(args[1]);
- Framef=newColorBoxes(pause,grid);
- f.setSize(500,400);
- f.setVisible(true);
- }
- }///:~
复制代码
ColorBoxes是一个典范的使用(程序),有一个构建器用于设置GUI。这个构建器接纳intgrid的一个参数,用它设置GridLayout(网格结构),使每维里都有一个grid单位。随后,它增加得当数目的CBox对象,用它们添补网格,并为每个都传送pause值。在main()中,我们可看到怎样对pause和grid的默许值举行修正(假如用命令行参数传送)。
CBox是举行正式事情的中央。它是从Canvas承继的,并完成了Runnable接口,使每一个Canvas也能是一个Thread。记着在完成Runnable的时分,并没有实践发生一个Thread对象,只是一个具有run()办法的类。因而,我们必需明白地创立一个Thread对象,并将Runnable对象传送给构建器,随后挪用start()(在构建器里举行)。在CBox里,这个线程的名字叫作t。
请寄望数组colors,它对Color类中的一切色彩举行了枚举(列举)。它在newColor()顶用于发生一种随机选择的色彩。以后的单位(格)色彩是cColor。
paint()则相称复杂——只是将色彩设为cColor,然后用那种色彩添补整张画布(Canvas)。
在run()中,我们看到一个无穷轮回,它将cColor设为一种随机色彩,然后挪用repaint()把它显现出来。随后,对线程实行sleep(),使其“休眠”由命令行指定的工夫长度。
因为这类计划计划十分天真,并且线程处置同每一个Canvas元素都严密分离在一同,以是在实际上能够天生恣意多的线程(但在实践使用中,这要遭到JVM可以沉着凑合的线程数目的限定)。
这个程序也为我们供应了一个风趣的评测基准,由于它展现了分歧JVM机制在速率上酿成的戏剧性的差别。
其实你不用Struts,spring这些工具,直接用jsp,servlet能够很方便地写出来,而且,可以根据个人的水平、爱好,有很多方案。而struts,spring这些工具的出来。 |
|