《西南科技大学 刘涌 JAVA 实验六.docx》由会员分享,可在线阅读,更多相关《西南科技大学 刘涌 JAVA 实验六.docx(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、面向对象程序设计A (Java)实验报告实验名称:多线程实验实验类型:指导教师: 刘涌专业班级: 信安1203姓名:黄学强学号:20111899实验地点: 东六E301实验成绩:日期:2014年4月30日实验六多线程实验一、实验目的:练习多线程类的两种实现方法,理解多线程程序的生命周期。二、实验内容:编写一多线程程序,实现如下功能:(1) 一个线程进行阶乘和的运算(1! +2! +3! +30!),每次阶乘计算时间随机间隔0. 5-1 秒;(2)另一个线程每隔0.1秒时间读取上个线程的运算结果和计算进程,并在图形界面中实 时显示结果。三、实验要求1正确设计显示运行结果和计算进程的图形用户界面;
2、2分别采用Thread类的子类和Runable接口两种方式完成两个线程的设计;3进行全面的测试并分析测试结果;四、实验设计1、先用Java Application方式建立应用程序框架。其中选用frame on screen ;2、实现界面设计。其中用xyLayout布局。3、用两种方法实现多线程方法一、设计两个线程ComputeThread和ReadThread线程分别继承Thread线程。ComputeThread线程实现阶乘和运算,用for循环实现阶乘和运算。ReadThread线程实 现在窗口显示结果和进程。方法二、ComputeThread 和 ReadThread 线程分另U接 口
3、Runnable。运算方法同上。五、实验过程1、按照设计的步骤实现。遇到的问题:Text只显示到6!解决方法:删除ReadThread的run ()方法下while循环语句中的count+,因为ReadThread线程和ComputeThread线程不同步。2、用setValue ()方法显示进度条,setText ()方法显示结果。六、实验结果送多线程多线程实验计算结果+1!+2!+3!+4!+5!+6!+7!+8!+9!+10!+11!+12! +13!+14!+15!+16!+17!+18!+19!+20!+21!+22 !+23!+24!+25!+26!+27!+28!+29!+30!
4、计算进程读取进程2.2E32开始讨论与分析进行全面的测试并分析测试结果;新建Thread. State. NEW:当一个Thread类或者其子类的对象被声明并创建时,新的线程对象处于新建状态,此时它已经有了相应的内存空间和其他资源start方法尚 未被调整用就绪可执行状态Thread. State. RUNNABLE:处于新建状态的线程被启动后, 将进入线程队列排队,这个时候具备了运行的条件,一旦轮到CPU的时候,就可以脱离 创建它的主线程独立开始自己的生命周期运行:就绪的线程被调度进入运行状态,每一 个Thread类及其子类的对象都有一个重要的run方法,当线程对象被调度执行的时候, 它将自
5、动调用本对象的 nm方法,从第一句代码开始执行。简要说明你在该实验中的收获与体会。首先:java程序是建立在线程之上的。.创建线程必须继承Thread class它已经为线程的创建和运行做了必要的配置。run 是线程就重要的方法。你必须覆写这个方法达到你想要的目的。(3)run方法所包含的代码就是和其他线程同时运行的代码以达到同一时刻运行多段代码的 目的。当终止了 run以后。这个线程也就结束了。调用线程的start方法才会执行run 方法。体会:通过实验设计了正确的显示运行结果和计算进程的图形用户界面;完成了对分别采用 Thread类的子类和Runable接口两种方式完成两个线程的设计;并且
6、进行全面的测试并分 析测试结果;对Java的学习有了很大的提升作用。附录:代码阶乘运算for(n =1 ; n = 30 ; n+)save = save * n ; 进行阶乘sum二sum + save ; 进行阶乘和运算str = + + n + !;strl = strl +str ; 字符串相加try (Thread.sleep(500 + (int) (Math.random() * 500);随机生成051秒catch (InterruptedException ex) 显示结果和进度条while (true) f.text. setText(ct. str 1); /显示阶乘字符
7、f.jd.setValue(ct.n); /显示进度条String s = String.valueOf(ct.sum);f.textl.setText(s); /显示结果try (Thread.sleep( 100); /休眠 100 毫秒)catch (InterruptedException ex) )单击开始按钮void jButton l_actionPerformed(ActionEvent e) ComputeThread ct = new ComputeThread();ReadThread rt = new ReadThread(ct, this);/ct.start(); 继承 Thread 类则:/rt.start();new Thread(ct).start。;接口 Runnableze:new Thread(rt).start();