JAVA教程第7章(多任务程序设计)_第1页
JAVA教程第7章(多任务程序设计)_第2页
JAVA教程第7章(多任务程序设计)_第3页
JAVA教程第7章(多任务程序设计)_第4页
JAVA教程第7章(多任务程序设计)_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第八章 多任务程序设计,内容提要 线程的定义、状态 线程的创建 单线程和多线程,假日,三五好友聚集在酒吧,一边天南地北地闲聊,一边欣赏音乐,享受美食,其乐融融。 人在同一时间可以做许多事,如上面情景中所描述的,吃、聊、听哪个都不耽误。为什么人可以这样呢?其实,是由于人脑通过某种方式,很好地处理了同时来自多方面的要求,指挥身体的各个器官做相应地动作。 计算机是否能像人一样一脑同时多用呢?回答是肯定的。当用户在计算机上看VCD时,可以同时看到画面、听到对话和音乐。当用户处理文档时,可以播放音乐,还可以同时运行病毒监控软件、打印文件 计算机能做到这一点,是因为通过软件对处理文件、播放音乐、运行其它应

2、用程序各分配一个线程,就可以同时完成多个任务的执行。,引子,知识要点,线程的概念 线程的五种状态:新建、就绪、运行、阻塞、死亡 两种创建线程的方法:创建Thread的子类、利用Runnable接口 单线程和多线程的实现,任务1 实现产品信息处理界面的动态显示,问题分析 知识学习 线程概念 创建单线程 创建多线程 任务实施,执行效果,问题分析,任务描述: 仓管系统中,查询产品信息的同时,在界面的状态栏显示系统日期,在左上角显示动态欢迎信息。 步骤分析: 线程概念和线程机制 分析问题中包含几个线程,以及各个线程相关知识 日期类应用 动态效果的实现方法 编写代码及编译执行,先来两个例子: 例1:利用

3、Windows系统中的DOS命令模式执行应用程序时,首先要进入该应用程序所在的目录,然后键入命令及应用程序的名字,按Enter执行程序。此时,若需要执行另一个程序,必须等第一个程序退出后,才能执行第二个程序。 例2:Windows系统中,可以在进行文字处理的同时,欣赏到美妙的音乐;当用户运行一个精美的Flash动画时,不仅可感受到图像、音响给用户带来的愉悦,可能还会看到一些人物对话的文字信息 上面的例子说明了什么?,知识学习进程与线程,知识学习进程与线程,知识学习单线程和多线程,线程:将一个程序转换成多个独立运行的子任务。这样的每个子任务都叫作一个“线程”(Thread) 单线程: java的

4、一个独立程序的每一次运行称为java单进程 类或者类其中的某些方法或者代码块只能“同时”被一个线程执行。 当有多个线程同时执行到此处时,只有当正在执行的线程运行完毕,释放锁之后,其它线程才可以继续执行。 多线程:与单线程比较而言,同一实例中有多个线程”同时”运行,知识学习线程的五种状态,知识学习两种创建线程的方式,利用Thread创建线程 创建一个Thread的子类 重写Thread的run()方法,实现内容即为程序将实现的功能,案例SimpleThread.java TimePrinter.java,知识学习两种创建线程的方式,利用Runnable接口实现 如果需要既可扩展自某个其它类,又能

5、运行于自己的线程之中 ,则使用Runnable接口实现 方法:先创建一个实现Runnable接口的类,并实现其中的run()方法,案例SimpleThread_2.java TimePrinter_2.java,采用两种创建线程的方法,编写一个程序,实现在applet上,依次显示三次“I love Java”信息,每次间隔为2000毫秒。 问题:若仓库系统案例中,直接调用run()方法,而不调用start()方法,产品信息处理与动态显示内容是否还是两个线程?,动手练习,40分钟,日期相关类:Date、Calendar和DateFormat Date()方法主要用于创建日期对象并获取日期; Ca

6、lendar()方法主要用于获取和设置日期; DateFormat()方法主要用于创建日期格式化器,然后再由格式化器将日期转换为各种日期格式串输出。 JAVA语言规定的基准日期为格林尼治标准时间1970.1.1.00:00:00,当前日期是由基准日期开始所经历的毫秒数转换出来的。 DateFomat类在java.text包中,Date和Calendar类在java.util包中。,知识学习日期,案例DateDemo.java,动画是基于循环序列的,通过序列的不断重复,可产生动画的效果。序列中的每一幅画面(包括图像和文本)称为一帧。通常,动画序列是每秒显示5-25帧。,知识学习动态效果,任务实施

7、,根据线程的概念,问题中的查询处理是一个线程,而显示系统时间和动态欢迎信息是另一个线程。 关键问题 线程的创建 理解日期类 字体的设置 动画的处理 编码实现,案例ProductThread.java,仓管系统中,需要在供应商查询界面的右上角显示一个系统标志图片,并具有闪烁效果。,动手练习,30分钟,Vector类,线程通信中需要多个数据的存放,可利用利用收集来实现多个数据对象的存放 收集是其中包含有一组对象的对象。 Java技术支持Vector(向量)、 LinkedList、Bits、Stack、Hashtable等收集类。 Vector类 Vector类允许你创建包含多个对象的动态数组,提

8、供追加、删除、插入元素的方法。 创建Vector类对象的语法,public Vector( ) public Vector(int initcap) public Vector(int initcap,int increment) 创建一个向量类的例子 import java.util.*; public class VectorTest extends Vector public VectorTest() super(1,1); public void addInteger(Integer ints) addElement(ints); ,Public void addString(Stri

9、ng addStr) addElement(addStr); public void insertString(String inStr,int index) insertElementAt(inStr,index); public void displayVector() Object obj; int len=size(); System.out.println(Number of Vector elements: +len); System.out.println(They are :);,for(int i=0;ilen;i+) obj=elementAt(i); System.out

10、.println(obj.toString(); public static void main(String args) VectorTest vec=new VectorTest(); int num=100; Integer int1=new Integer(num); String str1=This is an object added.; String str2=Hi,this is an object inserted . ; vec.addInteger(int1); vec.addString(str1); vec.insertString(str2,1); vec.disp

11、layVector(); ,例子: /java代码 import java.awt.*; import javax.swing.*; public class HelloApplet extends JApplet public void paint(Graphics g) g.drawString(大家好!,20,20); /html代码 ,扩展1JApplet,JApplet类,Component,Container,Panel,Applet,扩展1JApplet,Applet的生命周期 init()方法 start()方法 paint()方法 stop()方法 destroy()方法,扩

12、展1JApplet,例子: import java.awt.*; import javax.swing.*; import java.applet.*; public class AppletDemo extends JApplet public void init()/初始化的工作 public void start()/得到聚焦时进行的工作 public void stop()/失去聚焦时进行的工作 public void destroy()/被关闭时需要处理的事情 public void paint(Graphics g)/重新绘制窗体内容 注意:由于以上方法都是由Java环境自动调用的

13、,因此,必须声明为public类型,并且不能接收任何参数,paint()方法除外。,编写HTML文件的代码 ,扩展1JApplet,执行html文件 appletViewer applet.html,扩展1JApplet,绘制Applet窗体内容相关的类 Graphics类 Graphics类是抽象类,表示Applet的显示区域。它是java.awt包的组成部分,它用于在Applet的显示区域上画图。 paint()方法 paint()方法取Graphics类的对象为参数,利用图形上下文在绘画区域内画Applet图形。 当Applet第一次启动和每当Applet得到聚焦时,applet会自动地

14、调用此方法。 update()方法 update()方法是由Component类定义,取Graphics对象为参数。当applet请求刷新它的窗口时,可以调用它。Update()方法的默认使用背景颜色擦除applet窗口,然后调用paint()方法,系统更新屏幕。 repaint()方法 当需要手动重新绘制Applet的时候,可以通过调用repaint()方法。repaint()方法对update()方法进行调用,而后者又默认调用paint()方法重新绘制。,例子: import javax.swing.*; import java.awt.*; import java.applet.*; p

15、ublic class DisplayApplet extends JApplet double f(double x) /调用Math类的正弦函数 return Math.sin(x/10)*10+60; public void paint(Graphics g) /覆盖基类的paint()方法 for (int x = 0 ; x getSize().width ; x=x+1) /画线 g.drawLine(x, (int)f(x), x , (int)f(x) + 1); g.drawString(“This is displayed by the paint method”,20,2

16、0); ,例子: import javax.swing.*; import java.awt.*; import java.applet.*; public class AppletMethods extends JApplet int initCounter = 0; int startCounter = 0; int stopCounter = 0; int destroyCounter = 0; public void init() initCounter+; repaint(); public void start() startCounter+; repaint(); ,public

17、 void stop() stopCounter+; repaint(); public void destroy() destroyCounter+; repaint(); public void paint(Graphics g) g.drawString(“init has been invoked ” + String.valueOf(initCounter) + “ times”, 20,20); g.drawString(“start has been invoked ” + String.valueOf(startCounter) + “ times”, 20,40); g.dr

18、awString(“stop has been invoked ” + String.valueOf(stopCounter) + “ times”, 20,60); g.drawString(“destroy has been invoked ” +String.valueOf(destroyCounter) + “ times”, 20,80); ,在JApplet启动后,在窗体中显示一个9*9乘法表,效 果如下: 1 2 4 3 6 9 ,动手练习,40分钟,实现界面的例子: import javax.swing.*; public class AppletTest extends ja

19、vax.swing.JApplet JLabel lblCustomer; JTextField txtCustomer; JPanel panel; public void init() panel = new JPanel(); lblCustomer = new JLabel(客户名); txtCustomer = new JTextField(10); /直接调用了JApplet继承的方法来得到ContentPane对象 getContentPane().add(panel); panel.add(lblCustomer); panel.add(txtCustomer); ,实现事件的

20、例子: import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Demo extends JApplet implements ActionListener public void init() JButton button1 = new JButton(“Hello”); getContentPane().add(button1); button1.addActionListener(this); public void actionPerformed(ActionEvent evt) /使用状态窗口 showStatus(“Hello”); ,进程是程序的一次动态执行过程,进程的生命周期包括产生、发展和消亡三个阶

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论