使用多线程编写网络程序

[复制链接]
查看11 | 回复0 | 2008-4-6 08:39:58 | 显示全部楼层 |阅读模式
◆多线程简介线程(thread)是操作系统分配CPU时间的基本实体。每一个应用程序至少有一个线程,也可以拥有多个线程。线程是程序中的代码流。多个线程可以同时运行,并能共享资源。线程与进程不同,每个进程都需要操作系统为其分配独立的地址空间。而同一进程中的各个线程是在同一块地址空间中工作。在Java程序中,一些动态效果(如动画的实现、动态的字幕等)常利用多线程技术来实现。在Java语言中可以非常方便地使用多线程。和VisualC++相比,Java的多线程既容易学习,又容易使用。◆创建多线程的两种办法:(1)建立类Thread的子类(2)实现接口Runnable第二个办法比第一个使用得更为广泛。本讲座重点讲解第二个办法。◆接口Java语言取消了C++的多重继承(“多重继承”常常使C++程序员陷入混乱之中)。Java增加了“接口”(interface)的概念,使Java在取消多重继承后,并未使功能下降。“接口”(interface)是一种特殊的类。当你定义一个类时,可以“实现”(implements)一个(或多个)接口。语法如下:class类名extends超类名implements接口名◆例1.5.1一个最简单的多线程小应用程序importjava.Applet.*;importjava.awt.*;publicclassk04aextendsAppletimplementsRunnable{privateThreadm_k04a=null;publick04a(){}publicvoidpaint(Graphicsg){g.drawString("Running:"+Math.random(),10,20);}publicvoidstart(){m_k04a=newThread(this);m_k04a.start();}publicvoidstop(){m_k04a.stop();m_k04a=null;}publicvoidrun(){while(true){try{repaint();Thread.sleep(200);}catch(InterruptedExceptione){stop();}}}}◆控制线程的生命周期(1)start()方法启动一个线程(2)run()方法定义该线程的动作(3)sleep()方法使线程睡眠一段时间,单位为毫秒(4)suspend()方法使线程挂起(5)resume()方法恢复挂起的线程(6)yield()方法把线程移到队列的尾部(7)stop()方法结束线程生命周期并执行清理工作(8)destroy()方法结束线程生命周期但不做清理工作其中最常用的是start(),run(),sleep(),stop()。◆try??catch语句用于对“异常”的处理。和“错误”相比,“异常”是比较轻微的。它是指程序在运行中发生的意外情况。(try-catch语句在C++中也有)。在执行try后面的语句时,如果发生异常,则执行catch后面的语句。◆例1.5.2流动的标题该程序在运行时,三个标题在由下而上不断变换。HTML文件中的写法:(三个图片要事先做好)JAVA源程序:importjava.awt.*;importjava.applet.Applet;publicclasstestaniextendsAppletimplementsRunnable{Threadrunner;Imageimgs[];inthigh,y1,y2,y3;publicvoidinit(){high=size().height;y1=high;y2=high*2;y3=high*3;imgs=newImage[10];for(inti=0;i<3;i++)imgs=getImage(getCodeBase(),getParameter("image"+(i+1)));}publicvoidstart(){runner=newThread(this);runner.start();}publicvoidstop(){runner.stop();runner=null;}publicvoidrun(){while(runner!=null){try{Thread.sleep(100);repaint();y1--;if(y1==0){Thread.sleep(3000);y2=high;}y2--;if(y2==0){Thread.sleep(3000);y3=high;}y3--;if(y3==0){Thread.sleep(3000);y1=high;}}catch(InterruptedExceptione){}}}publicvoidpaint(Graphicsg){g.drawImage(imgs[0],0,y1,this);g.drawImage(imgs[1],0,y2,this);g.drawImage(imgs[2],0,y3,this);}publicvoidupdate(Graphicsg){paint(g);}}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行