




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务11设计考试系统中的倒计时,学习情境二(考试系统单机版),学习目标,知识目标,深入理解进程与线程的概念。 掌握线程创建的方法。 理解线程状态间的转换、优先级及其调度。 了解线程的同步在实际中的应用。,协调能力、团队合作的能力 接受新知识、自主学习的能力,多线程技术的应用,11.1 任务描述,本次任务是设计倒计时。考试系统中的倒计时功能是必不可少的功能之一,当考生成功登录考试系统后,点击【开始考试】,则计时系统开始倒计时。当考试时间结束时,系统将弹出相应的对话框提示并退出考试。如图11-1,在我们所设计的考试系统中,时间的显示在整个界面的上方,使得考生能清晰地看到时间的显示,把握好考试时间。Java利用线程技术可以实现时间的动态刷新和显示,从而可以实现时间的同步显示。,11.2 技术要点,线程的创建 线程的管理,程序,进程,多线程,程序 (Program) 储存于外存中的可执行文件 Program 进程 (Process) 载入内存中的可执行文件称为 Process 线程 (Thread) Process 中的一段程式码执行轨迹称为 Thread,是计算机中最小的执行单位。,HDD,Memory,Program,Process,Thread,线程和进程,线程和进程的主要差别体现在如下两个方面: (1)同样作为基本的执行单元,线程的划分比进程小。 (2)每个进程都有一段专用的内存区域。与此相反,线程却共享内存单元(包括代码和数据),通过共享的内存单元来实现数据交换、实时通信与必要的同步操作。,线程的创建,Java中提供了两种创建线程的方法 扩展Thread类 实现Runnable接口来创建线程。 其中Thread类和Runnable接口都定义在包java.lang中。,扩展Thread类创建线程,创建和执行线程步骤,步骤一、 创建一个Thread类的子类,该类必须重写Thread类的run( )方法。 class 类名称 extends Thread /从Thread类扩展出子类 成员变量; 成员方法; public void run() /重写Thread类的run( )方法 线程处理的代码 步骤二、 创建该子类的对象,即创建一个新的线程。创建线程对象时会自动调用Thread类定义的相关构造函数。 步骤三、 用构造函数创建新对象之后,这个对象中的有关数据被初始化,从而进入线程的新建状态。直到调用了该对象的strat()方法。 步骤四、线程对象开始运行,并自动调用相应的run()方法。,举例 ThreadDemo1.java,class MyThread extends Thread public void run() for(int i=1;i=10;i+) System.out.println(this.getName()+“: “+i); public class ThreadDemo1 public static void main(String args) MyThread t=new MyThread(); t.start(); ,举例 ThreadDemo2.java,class MyThread extends Thread MyThread(String str) super(str); public void run() for(int i=1;i=5;i+) System.out.println(this.getName()+“: “+i); public class ThreadDemo2 public static void main(String args) MyThread t1=new MyThread(“线程1“); MyThread t2=new MyThread(“线程2“); t1.start(); t2.start(); for(int i=1;i=5;i+) System.out.println(Thread.currentThread().getName()+“: “+i); ,实现Runnable接口创建线程,Java提供了Runnable接口来完成创建线程的操作。在Runnable接口中,只包含一个抽象的run( )方法。 public interface Runnable public abstract void run( ) 利用Runnable接口创建线程,首先定义一个实现Runnable接口的类,在该类中必须定义run( )方法的实现代码。 class MyRunnable implements Runnable public void run() /新建线程上执行的的代码 ,实现Runnable接口创建线程,直接创建实现了Runnable接口的类的对象并不能生成线程对象,必须还要定义一个Thread对象,通过使用Thread类的构造函数去新建一个线程, 并将实现Runnable接口的类的对象引用作为参数传递给为Thread类的构造函数,最后通过start( )方法来启动新建线程。基本步骤如下: MyRunnable r =new MyRunnable( ); Thread t= new Thread(r ); r.start;,举例 RunnerDemo.java,class MyRunner implements Runnable public void run() String s = Thread.currentThread().getName(); for(int i=1;i=10;i+) System.out.println(s + “: “ + i); public class RunnerDemo public static void main(String args) MyRunner r1=new MyRunner(); Thread t1=new Thread(r1,“线程1“); Thread t2=new Thread(r1,“线程2“); t1.start(); t2.start(); for(int i=1;i=10;i+) System.out.println(“main 主线程“+“: “+i); ,线程的管理,线程的状态 线程的优先级 线程的调度 线程的同步,线程的状态,线程在它的生命周期一般具有五种状态,即新建、就绪、运行、堵塞、死亡。,线程的优先级,与Thread类的中和优先级相关的三个静态常量如下: 低优先级:Thread.MIN_PRIORITY,取值为1。 缺省优先级: Thread. NORM_PRIORITY,取值为5。 高优先级:Thread.MAX_PRIORITY,取值为10 。,线程的调度,线程的同步,多个线程序需要共享同一资源,如果此时不去考虑线程之间的协调性,就可能造成运行结果的错误。,举例 ATMDemo1.java,class ATMDemo1 public static void main(String args) BankAccount visacard= new BankAccount(); ATM 丈夫 = new ATM(“丈夫“, visacard, 200); ATM 妻子 = new ATM(“妻子“, visacard, 300); Thread t1 = new Thread(丈夫); Thread t2 = new Thread(妻子); System.out.println(“当前帐户余额为:“ + visacard. getmoney (); t1.start(); t2.start(); class ATM implements Runnable /模拟ATM机或柜台存钱 BankAccount card; String name; long m; ATM(String n, BankAccount card, long m) = n; this.card = card; this.m = m; ,举例 ATMDemo1.java(续),public void run() card.save(name, m); /调用方法存钱 System.out.println( name+“存入 “+m+“ 后,帐户余额为 “+card. getmoney (); class BankAccount static long money=1000; /设置帐户中的初始金额 public void save(String s, long m) /存錢 System.out.println(s+“存入 “+m); long tmpe = money; /获得当前帐户余额 try /模拟存钱所花费的时间 Thread.currentThread().sleep(10); catch(InterruptedException e) money = tmpe + m; /相加之后存回帐户 public long getmoney () /获得当前帐户余额 return money; ,11.3 任务实施 (模仿实践),11.3 任务实施 (模仿实践),例11-7 TestClock.java import java.text.NumberFormat; import java.awt.event.*; import javax.swing.*; public class TestClock implements ActionListener JFrame jf; JButton begin; JButton end; JButton pause; JPanel p1; JLabel clock; ClockDispaly mt; public TestClock() jf = new JFrame(“倒计时“); begin = new JButton(“开始考试“); end = new JButton(“结束考试“); pause = new JButton(“暂停考试“); p1=new JPanel(); JLabel clock = new JLabel(); clock.setHorizontalAlignment(JLabel.CENTER); p1.add(begin); p1.add(pause); p1.add(end); jf.add(p1,“North“); jf.add(clock,“Center“); jf.setSize(340,180); jf.setLocation(500,300); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); mt = new ClockDispaly(clock,100); /设置考试时间位为100分钟 begin.addActionListener(this); pause.addActionListener(this); end.addActionListener(this); ,public static void main(String args) TestClock test=new TestClock(); public void actionPerformed(ActionEvent e) String s = e.getActionCommand(); if(s.equals(“开始考试“) begin.setEnabled(false); mt.start( ); /启动倒计时线程 else if(s.equals(“暂停考试“) pause.setText(“继续考试“); mt.suspend(); else if(s.equals(“继续考试“) pause.setText(“暂停考试“); mt.resume(); ,else if(s.equals(“结束考试“) begin.setEnabled(false); pause.setEnabled(false); end.setEnabled(false); p1.setEnabled(false); mt.stop(); System.exit(0); class ClockDispaly extends Thread private JLabel lefttimer; private JLabel totaltimer; private int testtime;,public ClockDispaly(JLabel lt,int time) lefttimer = lt; testtime = time*60; public void run( ) NumberFormat f = NumberFormat.getInstance(); /返回整数部分允许显示的最小整数位数 f.setMinimumIntegerDigits(2); int h,m,s; while (testtime = 0) h = testtime /3600; m = testtime %3600/60; s = testtime %60; StringBuffer
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教育与办公的未来趋势科技引领下的变革
- 技术时代下的教育心理学与职业选择
- 探索未来教育的隐私保护技术与发展趋势
- 探索教育心理学在多元化教学策略中的应用
- 三标培训课件
- 90后的培训课件
- 抖音商户运营经理直播排期监管制度
- 全球铀矿资源分布现状与核能产业市场前景预测研究报告
- 公交优先战略下2025年城市交通拥堵治理的实践与案例研究
- Cbz-S-S-Pro-Pro-allyl-生命科学试剂-MCE
- 生活饮用水管道分质直饮水卫生规范
- 人教版六年级数学上册《全册完整》课件
- 奇瑞汽车在线测评题库
- 《SVG原理与应用》课件
- 开展电力登杆培训课件
- 初中英语语法、词汇及固定搭配专题训练100题(含参考答案)
- 2024年浙江宁波市水务环境集团有限公司招聘笔试参考题库含答案解析
- 能效对标管理制度范文
- 麻醉晋升述职报告
- PE管生产记录单
- 四川省乐山市马边彝族自治县+2022-2023+学年三年级下学期期末英语试题
评论
0/150
提交评论