南邮实验报告JAVA 线程程序设计
南京邮电大学java实验报告语言特性
实验报告班级:姓名:学号:课程名称Java程序设计实验项目Java语言特性实验项目类型验证演示综合设计指导教师吴伟敏成绩√一、实验目的1.了解线程的基本概念;2.掌握异常以及错误处理的方式;3.掌握Java程序调用I/O以及界面设计的方法;二、实验步骤1.假设某家银行,它可接受顾客的汇款,每做一次汇款,便可计算出汇款的总额。
现有两个顾客,每人都分3次,每次100元将钱到入。
试编写一个程序,模拟实际作业。
测试以下程序,说出此程序的运行机制,体会多线程程序设计以及异常处理的方法。
程序如下:class CBank{private static int sum=0;public static void add(int n){int tmp=sum;tmp=tmp+n; // 累加汇款总额try{Thread.sleep((int)(10000*Math.random()));}catch(InterruptedException e){}sum=tmp;System.out.println("sum= "+sum);}}class CCustomer extends Thread {// CCustomer类,继承Thread类public void run(){ // run() methodfor(int i=1;i<=3;i++)CBank.add(100); // 将100元分三次汇入}}public class Ex3_1{public static void main(String args[]) {CCustomer c1=new CCustomer();CCustomer c2=new CCustomer();c1.start();c2.start();}}基本要求运行程序5次,观察每次运行结果是否相同。
运行结果有时相同,有时不同,5次运行结果如下图所示:思考问题运行结果每次是否相同,运行时间是否相同,为什么?程序运行结果有时相同,有时不同,结果并不确定,运行时间也是不相同的,因为存钱的方法未同步,导致两位顾客的存钱行为是分步进行的,相当于各自存各自的钱,两个sum,最终两位顾客的存钱结束,会有各自的两个sum,都为300。
java多线程程序设计实验总结
java多线程程序设计实验总结一、实验目的本次实验旨在通过编写Java多线程程序,掌握多线程编程的基本概念和技能,理解多线程程序的运行原理,提高对Java语言的熟练度。
二、实验内容本次实验分为三个部分:创建线程、线程同步和死锁。
2.1 创建线程创建线程有两种方式:继承Thread类和实现Runnable接口。
继承Thread类需要重写run方法,在run方法中编写线程执行的代码;实现Runnable接口需要实现run方法,并将其作为参数传入Thread类的构造函数中。
在创建多个线程时,可以使用同一个Runnable对象或者不同的Runnable对象。
2.2 线程同步当多个线程同时访问共享资源时,可能会出现数据不一致等问题。
为了避免这种情况,需要使用同步机制来保证各个线程之间的协调运行。
常见的同步机制包括synchronized关键字和Lock接口。
synchronized关键字可以用来修饰方法或代码块,在执行该方法或代码块时,其他所有试图访问该方法或代码块的线程都必须等待当前执行完成后才能继续执行。
Lock接口提供了更加灵活和高级的锁机制,可以支持更多种类型的锁,如读写锁、可重入锁等。
2.3 死锁死锁是指两个或多个线程在互相等待对方释放资源的情况下,都无法继续执行的现象。
死锁的发生通常由于程序设计不当或者资源分配不合理所导致。
为避免死锁的发生,可以采取以下措施:避免嵌套锁、按照固定顺序获取锁、避免长时间占用资源等。
三、实验过程本次实验我编写了多个Java多线程程序,包括创建线程、线程同步和死锁。
其中,创建线程部分我使用了继承Thread类和实现Runnable 接口两种方式来创建线程,并测试了多个线程之间的并行执行情况;在线程同步部分,我使用synchronized关键字和Lock接口来保证共享资源的访问安全,并测试了多个线程同时访问共享资源时是否会出现数据不一致等问题;在死锁部分,我编写了一个简单的死锁程序,并通过调整程序代码来避免死锁的发生。
实验报告java程序设计
实验报告java程序设计一、引言本次实验是针对Java程序设计的实践性活动。
Java是一种广泛应用于各种平台的编程语言,具有跨平台、面向对象、安全性高等特点。
通过本次实验,我们将学习如何利用Java语言进行程序设计,并进一步熟悉Java的基本语法和面向对象的思想。
二、实验目的1. 掌握Java的基本语法和面向对象的思想;2. 熟悉Java程序的编写和运行过程;3. 学会利用Java进行简单的程序设计。
三、实验内容3.1 实验环境为了进行本次实验,我们需要安装以下工具和环境:- JDK(Java Development Kit):Java开发工具包,包含了编译器和相关工具;- IDEA(Integrated Development Environment for Java):一种常用的Java集成开发环境。
3.2 实验步骤1. 安装JDK和IDEA,并完成相应的配置工作;2. 创建一个Java项目,并创建一个名为`HelloWorld`的Java类;3. 在`HelloWorld`类中编写代码,实现输出`Hello, World!`的功能;4. 编译和运行程序,观察结果。
四、实验过程和结果4.1 实验过程首先,我们需要安装JDK和IDEA,并完成相应的配置工作。
然后,我们打开IDEA,创建一个新的Java项目。
接着,在该项目中创建一个名为`HelloWorld`的Java类。
在`HelloWorld`类中,我们编写以下代码:javapublic class HelloWorld {public static void main(String[] args) {System.out.println("Hello, World!");}}完成代码编写后,我们点击IDEA工具栏上的编译按钮,对代码进行编译。
编译成功后,我们点击运行按钮,运行程序。
4.2 实验结果在IDEA的控制台窗口上,我们可以看到以下输出:Hello, World!这就是我们期望的输出结果,说明我们成功地使用Java编写并运行了一个程序。
南京邮电大学Java实验分析报告三
南京邮电大学Java实验报告三————————————————————————————————作者:————————————————————————————————日期:实验报告(2015/2016学年第一学期)课程名称JA V A语言程序设计实验名称流处理程序设计实验时间2015 年12 月25 日指导单位计算机学院软件工程系指导教师邓玉龙学生姓名李健琅班级学号B14070427 学院(系) 物联网专业网络工程实验报告实验名称流处理程序设计指导教师邓玉龙实验类型设计实验学时 2 实验时间2015-12-25 一、实验目的和任务要求学生能在学习和理解课堂学习内容中JA V A流编程理论的基础上,学习并逐步掌握JA V A流程序的编写和调试,学习根据处理需求对不同流的正确选择使用和组合使用方法。
二、实验环境(实验设备)PC微型计算机系统,Microsoft Windows操作系统,,SUN Java Development Kit开发工具包,NetBeans开发工具。
三、实验原理及内容(包括操作过程、结果分析等)实验内容:设计和编写一个程序从键盘读入一行字符串,将其写入一个文本文件中,再编写另一个程序从文本文件中读入字符串并在命令行窗口显示出来。
实验源程序:(1)写入文本程序:import java.io.*;import java.util.Scanner;public class Write {public static void main(String args[]) {File f=new File("test.txt"); //创建文本文件对象FileWriter fw; //字符输出流对象Scanner in = new Scanner(System.in); //准备从键盘输入字符串System.out.print("请输入文本字符:"); //键盘输入提示String s = in.nextLine(); //从键盘输入文本字符串try{fw=new FileWriter(f); //创建字符输出流对象fw.write(s + "\n"); //写字符串到文件fw.close(); //关闭字符输出流System.out.println("写文本文件完毕");}catch (IOException e) {System.out.println("写文件错误!");}}}(2)读取文本程序:import java.io.*;import java.util.Scanner;public class Read {public static void main(String args[]){File f;FileReader fr; //字符/输入流对象BufferedReader br; //字符输入缓冲流Scanner in =new Scanner(System.in); //准备从键盘输入字符串System.out.print("请输入要读入的文件名:"); //键盘输入提示String s=in.nextLine(); //从键盘输入文件名try{f =new File(s); //创建文件对象fr =new FileReader(f); //创建字符输入流对象br =new BufferedReader(fr); //字符输入流接入到输入缓冲流String str; //变量s存放读入的文本行System.out.println("读出的文本文件为:");while(true){str=br.readLine(); //从文本文件读入一行if(str == null) break; //读入结束System.out.println(str); //输出显示读入的文本}fr.close();br.close();}catch (IOException e) {System.out.println("您所要读写的文件不存在!");//显示错误信息}}}实验结果:四、实验小结(包括问题和解决方法、心得体会等)通过本次实验,让我学会了用Java语言进行文本文件的读写,并且加强了自己对Java语言的运用编程能力,真正理解了关于流处理的一些知识内容。
java多线程的实验报告
java多线程的实验报告Java多线程的实验报告一、引言多线程是计算机科学中一个重要的概念,它可以提高程序的并发性和效率。
Java作为一种广泛应用的编程语言,也提供了丰富的多线程支持。
本实验旨在通过编写多线程程序,探索Java多线程的特性和使用方法。
二、实验目的1. 理解多线程的概念和原理;2. 掌握Java多线程的基本使用方法;3. 分析多线程程序的执行过程和效果。
三、实验过程1. 创建多线程在Java中,可以通过继承Thread类或实现Runnable接口来创建多线程。
本实验选择实现Runnable接口的方式。
首先,定义一个实现了Runnable接口的类MyThread,重写run()方法,在该方法中编写线程的具体逻辑。
2. 启动多线程在主线程中,创建MyThread对象,并通过Thread类的构造函数将其作为参数传入。
然后,调用Thread类的start()方法启动线程。
3. 线程同步在多线程程序中,为了避免线程之间的数据竞争和冲突,需要进行线程同步。
Java提供了synchronized关键字和Lock接口来实现线程同步。
本实验使用synchronized关键字来保证线程的安全性。
4. 线程通信多线程之间的通信可以通过共享变量、wait()和notify()方法来实现。
本实验通过共享变量来实现线程通信,其中一个线程负责生产数据,另一个线程负责消费数据。
5. 线程池Java提供了Executor框架来管理线程池。
通过使用线程池,可以减少线程的创建和销毁开销,提高程序的性能。
本实验使用Executor框架来管理线程池,并设置合适的线程数量。
四、实验结果通过以上实验过程,成功实现了多线程程序,并观察到了以下结果:1. 多线程的执行顺序是不确定的,不同线程的执行顺序可能不同;2. 多线程程序可以提高程序的并发性和效率;3. 线程同步能够保证多线程程序的安全性;4. 线程通信可以实现多线程之间的数据交换和协作;5. 使用线程池可以提高程序的性能。
南邮_JAVA实验1
运行结果:
实验说明:P117页(1)人员类(Person)的多态性设计,要求分别用接口、抽象类的方式设计程序实现多态性。即第一种方案将Person定义成抽象类,然后通过定义该类的子类来实现。第二种方案将Person定义成接口,然后定义实现该接口的类。
代码:
接口实现:
抽象类实现:
测试代码:
运行结果:
实验报告
(2015 / 2016学年第2学期)
课程名称
JAVA语言程序设计
实验名称
实验3:子类与继承
实验时间1
日
指导单位
计算机学院软件工程系
指导教师
杨健
学生姓名
李翔
班级学号
B15041419
学院(系)
计软院
专业
软件工程NIIT
实验名称
实验3:子类与继承
指导教师
成杨健
实验类型
验证&设计
实验学时
2
实验时间
2015-6-14
一、实验目的
(1)掌握多态性的实现
(2)掌握抽象类和抽象方法的定义和使用
(3)掌握接口的定义和使用
二、实验环境(实验设备)
Intellij IDEA
三、实验内容
实验说明:定义一个类Rectangle代表矩形,在该类中定义成员变:Length和Width;方法:getLength()、getWidth()、setLength()、setWidth()、getAera()和toString()。为Rectangle类派生出一个子类Box代表立方体,定义成员变:Height,定义方法:getHeight()、setHeight()、getVolume()和toString()
java多线程实验报告
java多线程实验报告一、实验目的本次实验旨在探究Java多线程编程的原理和技巧,以及如何应用多线程编写高效、稳定、可靠的多线程应用程序。
二、实验环境本次实验使用的环境为:硬件:Intel Core i5 2.5 GHz处理器,8GB内存,256GB SSD硬盘软件:Windows 10操作系统,JDK 1.8开发工具三、实验步骤1. 编写并运行多线程程序2. 对程序进行分析、调试和优化3. 测试程序的效率和稳定性4. 记录实验过程和实验结果5. 撰写实验报告四、实验过程1. 编写并运行多线程程序本次实验编写的多线程程序是一个简单的计时器,程序的主要功能是在控制台上输出1-100的数字,并在输出每一个数字之前暂停一段时间,以模拟实际应用中的处理等待。
具体代码如下:public class MyThread extends Thread {private int delay;private int count;public MyThread(int delay, int count) {this.delay = delay;this.count = count;}@Overridepublic void run() {for (int i = 1; i <= count; i++) {try {Thread.sleep(delay);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(i);}}}public class Main {public static void main(String[] args) {MyThread thread1 = new MyThread(100, 100); MyThread thread2 = new MyThread(50, 100); thread1.start();thread2.start();}}2. 对程序进行分析、调试和优化在程序分析、调试和优化的过程中,我遇到了以下几个问题和解决方法:问题1:程序多次运行时,会出现线程执行顺序不同的情况;解决方法:使用Thread.sleep和yield方法来控制线程执行顺序。
实验六:java多线程编程
计算机科学系实验报告实验六: java多线程编程一、实验目的1.掌握 Java 多线程编程方法.二、实验仪器设备与实验环境条件1.PC机2.Windows 7系统3.Inernet连接4.Eclipse开发平台三、实验内容、步骤、结果1.Modify Simpl eThread.java so that all the threads are daemon threads andverify that the program ends as soon as main( ) is abl e to exitCreat.tw.Threa.subclasses.on.wit..run( .tha.start.u.an.the.call.wait( ).Th.othe.class ’.run( .shoul.captur.th.referenc.o.th.firs.Threa.object.It.run( .shoul.cal.notifyAll( .f o.th.firs.threa.afte.som.numbe.o.second.hav.passe.s.tha.firs.threa.ca.prin..message.2.Inherit a class from java.util.Timer and impl ement the requestStop( ) methodas in Stopping.java.源代码:1).package MyThread;public class SimpleThread extends Thread{private int countDown = 5;private static int threadCount = 0;public SimpleThread() {super("" + ++threadCount);}public String toString() {return"#" + getName() + ": " + countDown;}public void run() {while(true) {System.out.println(this);if(--countDown == 0) return;}}public static void main(String[] args) { SimpleThread simple = null;for(int i = 0; i < 5; i++){simple=new SimpleThread();simple.setDaemon(true);simple.start();}}}实验结果截图2).package MyThread;public class TwoThread extends Thread{public TwoThread() {}public static void main(String[] args) { ThreadFirst first = new ThreadFirst();System.out.println("Start Thread First!"); first.start();ThreadSecond second = new ThreadSecond(first);System.out.println("Start Thread Second!"); second.start();System.out.println("Main Thread Exit!");}}class ThreadFirst extends Thread {public void run() {try {Thread.sleep(1000);waitMethod();} catch (InterruptedException e) {e.printStackTrace();}}public synchronized void waitMethod() {try {System.out.println("Thread First Wartting....");this.wait();System.out.println("Thread First Printting...."); } catch (InterruptedException e) {e.printStackTrace();}}public synchronized void notifyMethod() {try {this.notifyAll();System.out.println("Thread First Notify!");} catch (Exception e) {e.printStackTrace();}}}class ThreadSecond extends Thread {ThreadFirst first;public ThreadSecond(ThreadFirst first) {this.first = first;}public void run() {try {Thread.sleep(4000);first.notifyMethod();} catch (InterruptedException e) {e.printStackTrace();}}}实验结果截图3).package MyThread;import java.util.TimerTask;public class Stopping {public static void main(String[] args) {final CanStop stop=new CanStop();java.util.Timer timer=new java.util.Timer(true);stop.start();timer.schedule(new TimerTask(){public void run() {System.out.println("Requesting stop...");stop.requestStop();}}, 200);}}class CanStop extends Thread {private volatile boolean stop = false;private int counter = 0;public void run() {while(!stop && counter < 10000) {System.out.println(counter++);}if(stop)System.out.println("Detected stop...");}public void requestStop() { stop = true; }}实验结果截图四、实验心得这实验有点难, 线程我真的不是很理解, 前面学得的java基本没什么问题, 但是到了线程这一章, 我感觉有点难学了, 不是很懂。
8-实验八Java多线程操作(实验报告内容)
8-实验八Java多线程操作(实验报告内容)实验八 Java多线程操作(实验报告)一、目的1.掌握Java多线程操作。
二、实验内容启动线程,线程休眠,线程同步,等待和唤醒三、实验环境JDK1.6+dos环境四、实验原理通过案例掌握多线程操作。
五、实验步骤1、设计一个线程操作类,要求可以产生三个线程对象,并可以分别设置三个线程的休眠时间,如下所示:线程A,休眠10秒线程B,休眠20秒线程C,休眠30秒2、生产者与消费者问题,生产者生产一台电脑,消费者马上将生产出的电脑取走。
六、实验小结1、class MyThread implements Runnable{String name;int time;public MyThread(String name,int time){/doc/0713104097.html,=name;this.time=time;}public void run(){try{Thread.sleep(this.time);}catch(Exception e){}System.out.println(/doc/0713104097.html, +"线程,休眠"+this.time/1000+"秒");}}public class Demo08{public static void main(String args[]){MyThread mt1=new MyThread("线程A",10000);MyThread mt2=new MyThread("线程B",20000);MyThread mt3=new MyThread("线程C",30000);new Thread(mt1).start();new Thread(mt2).start();new Thread(mt3).start();}}//生产电脑和搬运电脑class Computer{private String name;public static int sum=0;private boolean flag=true;public Computer(String name){/doc/0713104097.html,=name;}public synchronized void set(){ //生产电脑if(!flag){try{super.wait();}catch(Exception e){e.printStackTrace();}}sum=sum+1;System.out.println("第"+sum+"台"+name+"电脑被生产");flag=false;super.notify();}public synchronized void get(){ //搬走电脑if(flag){try{super.wait();}catch(Exception e){e.printStackTrace();}}System.out.println("第"+sum+"台"+name+"电脑被搬走");flag=true;super.notify();}}class Producter implements Runnable{ private Computer c=null;public Producter(Computer c){this.c=c;}public void run(){for(int i=0;i<1000;i++){this.c.set();}}}class Worker implements Runnable{ private Computer c=null;public Worker(Computer c){this.c=c;}public void run(){for(int i=0;i<1000;i++){this.c.get();}}}public class Test{public static void main(String args[]){ Computer c=new Computer("联想");Producter p=new Producter(c);Worker w=new Worker(c);new Thread(p).start();new Thread(w).start();}}。
南邮Java实验报告1-综合图形界面程序设计
南邮Java实验报告1-综合图形界面程序设计英文回答:This report presents the findings of a comprehensive study on the design and implementation of a graphical user interface (GUI) program using Java. The experiment involved the development of a simple calculator application with basic arithmetic functions. The GUI was designed using the Java Swing library, which provided a wide range of pre-built components for creating user interfaces.The development process began with a thorough analysis of the user requirements for the calculator application. Based on this analysis, a user interface prototype was created using a wireframing tool. This prototype served as the blueprint for the final GUI design.The next step was to implement the GUI using Java Swing components. These components include buttons, text fields,labels, and panels, which were arranged and configured to create a user-friendly and intuitive interface. The calculator's basic arithmetic operations were implemented using simple mathematical expressions and conditional statements.Throughout the development process, extensive testing was conducted to ensure the functionality and reliability of the GUI program. Unit tests were used to verify the behavior of individual components, while integration tests ensured that the components worked together seamlessly. Performance tests were also conducted to assess the responsiveness of the GUI under various loads.The final GUI program was a fully functional calculator with a user-friendly interface and reliable performance. It demonstrated the effectiveness of Java Swing for creating complex GUI applications with ease and efficiency.中文回答:南邮Java实验报告1-综合图形界面程序设计。
java多线程实验报告
Java实验程序设计实验报告实验名称:多线程一:实验目的1、掌握线程和多线程的概念。
2、掌握创建线程的两种方法及其区别。
3、了解线程的启动、终止、同步、互斥和优先级等概念。
二:实验内容1、编写一个程序,其功能是运行之后,其中有一个线程可以输出20次你的学号,另一个线程会输出20次你的姓名。
2、编写一个图形界面程序,运行之后,让其中有一个线程能在界面上“实时”显示系统当前时间(精确到秒获取时间可查询java.util.Calendar类,它包含了多个用于获得系统时间的函数)。
另让一个线程可以在界面上提示当前系统时间下用户该做什么工作(例如当程序判断出系统时间现在是8:00到9:00,则提示用户该上课;现在是23:00到8:00,则提示用户该休息。
具体测试时可以将时间段限制到秒级,以便及时查看到程序运行中提示信息的变化)。
三:实验设计四:实验测试及运行结果实验一;20次输出姓名,学号实验二:一个界面的左边显示当时时间,显示的时间会随时间的改变而改变,右边显示某个时间段该干什么,比如该睡觉,该上课,该自习。
五:问题与总结通过这次实验学会了怎么使用多线程。
六:附录package shiyan6_1;class MyThread implements Runnable {public MyThread() {// 构造函数的代码,根据需要来写}public void run() {for (int i = 1; i <= 20; i++) {System.out.println("第" + i + "次执行线程"+ Thread.currentThread().getName());try {Thread.currentThread().sleep(500);// 睡眠500ms } catch (InterruptedException e) {}}}public static void main(String args[]) {Thread t1 = new Thread(new MyThread(), "学号"); // 创建线程1的对象,并// 通过第二个参数将其命名为thread 1Thread t2 = new Thread(new MyThread(), "姓名"); // 创建线程2的对象,并// 通过第二个参数将其命名为thread 2t1.start(); // 启动两个线程运行t2.start(); // 虽然t2的启动表面上好像在后面,实际上两个线程的执行并无先后之分,}}实验二:package shiyan6_2;import java.awt.FlowLayout;import java.text.SimpleDateFormat;import java.util.Calendar;import javax.swing.JFrame;import javax.swing.JTextArea;public class MyThread {JFrame jf = new JFrame("线程都往界面上显示内容的例子");static JTextArea jta1, jta2;Thread trda = new thread1(); // 线程trdaThread trdb = new thread2(); // 线程trdbpublic MyThread() // 构造函数,生成图形界面{// setBounds(100,100,500,200);jf.setLayout(new FlowLayout());jta1 = new JTextArea(15, 30);jta2 = new JTextArea(15, 30);jf.add(jta1);jf.add(jta2); // 将2个组件添加到界面上jf.setLocation(100, 150);jf.setVisible(true);jf.pack();trda.start(); // 两个线程都启动trdb.start();}public static void main(String args[]) {MyThread frm = new MyThread();}}class thread1 extends Thread // 线程类thread1 {public void run() {int y, m, d, h, mi, s;while(true){Calendar cal = Calendar.getInstance(); // 获取一个Calendar 类的实例对象y = cal.get(Calendar.YEAR); // 获取年份m = cal.get(Calendar.MONTH)+1; // 获取月份,获取的月份是从0到11表示一到十二月d = cal.get(Calendar.DATE); // 获取日期h = cal.get(Calendar.HOUR_OF_DAY); // 获取小时mi = cal.get(Calendar.MINUTE); // 获取分钟s = cal.get(Calendar.SECOND); // 获取秒钟String s1=Integer.toString(y);String s2=Integer.toString(m);String s3=Integer.toString(d);String s4=Integer.toString(h);String s5=Integer.toString(mi);String s6=Integer.toString(s);MyThread.jta1.setText(s1+"年"+s2+"月"+s3+"日"+s4+"时"+s5+"分"+s6+"秒");}}}class thread2 extends Thread // 线程类thread2{public void run() {Calendar cal = Calendar.getInstance();int hour = cal.get(Calendar.HOUR_OF_DAY); // 获取小时int minute = cal.get(Calendar.MINUTE); // 获取分钟if (hour>23||hour<7){MyThread.jta2.append(" 睡觉时间");}else if(hour>7&&hour<17){MyThread.jta2.append(" 上课时间");}else if(hour>17&&hour<23){MyThread.jta2.append(" 自习时间");}}}。
JAVA线程程序设计实验报告
线程程序设计一、课题内容和要求内容:设计和编写一个编写一个指针式时钟程序,应用线程实现时钟的走动。
要求:本实验旨在通过实验,培养学生将JAVA 线程的相关知识点(包括线程调度,线程同步等)有机结合并加以综合应用,在实验中设计多线程程序的能力。
二、设计思路分析class Clock:一个指针式时钟的主类class Layout: 添加窗口和时钟组件class ClockPaint:定义时钟组件三、概要设计public class Clock extends JFrame {public static void main(String[] s) ;}class Layout extends JFrame {public Layout();}class ClockPaint extends JPanel implements Runnable {int x, y, r;int h, m, s;double rad = Math.PI / 180;public ClockPaint(int x, int y, int r);public void paint(Graphics g);public void run();}时钟的绘制:运行时钟:四、详细设计import java.awt.*;import javax.swing.*;import java.util.*;public class Clock extends JFrame {public static void main(String[] s) {new Layout();}}class Layout extends JFrame {// 添加窗口和时钟组件public Layout() {ClockPaint cp = new ClockPaint(20, 20, 70);add(cp);setBounds(260, 120, 200, 200);setResizable(false);this.setTitle("指针式时钟");this.setVisible(true);}}class ClockPaint extends JPanel implements Runnable {// 定义时钟组件int x, y, r;// 时钟的位置坐标和半径int h, m, s;// 小时,分钟,秒double rad = Math.PI / 180;// 定义弧度public ClockPaint(int x, int y, int r) {// 构造函数this.x = x;this.y = y;this.r = r;Calendar now = Calendar.getInstance();// 初始化日历对象s = now.get(Calendar.SECOND) * 6;// 获得初始秒转换成度数m = now.get(Calendar.MINUTE) * 6;// 获得初始分钟转换成度数h = (now.get(Calendar.HOUR_OF_DAY) - 12) * 30+ now.get(Calendar.MINUTE) * 6 / 12;// 获得初始小时转换成度数加分钟实现连贯Thread t = new Thread(this);// 新建线程t.start();// 启动线程}public void paint(Graphics g) {// 绘制时钟g.setColor(Color.BLACK);// 画背景g.fillRect(0, 0, r * 3, r * 3);g.setColor(Color.WHITE);// 画圆g.drawOval(x, y, r * 2, r * 2);int d = 0;// 每6度画一个小点int x1, y1, x2, y2;for (int i = 0; i < 60; i++) {x1 = (int) ((r - 2) * Math.sin(rad * d));y1 = (int) ((r - 2) * Math.cos(rad * d));g.drawString(".", x + r + x1 - 1, x + r - y1 + 1);d += 6;}d = 30;// 从30度开始每30度画一个数字和一线for (int i = 1; i <= 12; i++) {x1 = (int) ((r - 14) * Math.sin(rad * d));y1 = (int) ((r - 14) * Math.cos(rad * d));g.drawString(i + "", x + r + x1 - 4, x + r - y1 + 5);x1 = (int) ((r - 6) * Math.sin(rad * d));y1 = (int) ((r - 6) * Math.cos(rad * d));x2 = (int) ((r - 2) * Math.sin(rad * d));y2 = (int) ((r - 2) * Math.cos(rad * d));g.drawLine(x + r + x2, y + r - y2, x + r + x1, y + r - y1);d += 30;}g.setColor(Color.RED);// 按时间画秒针x1 = (int) ((0.8 * r) * Math.sin(rad * s));y1 = (int) ((0.8 * r) * Math.cos(rad * s));g.drawLine(x + r, y + r, x + r + x1, y + r - y1);g.setColor(Color.BLUE);// 按时间画分针x1 = (int) ((0.6 * r) * Math.sin(rad * m));y1 = (int) ((0.6 * r) * Math.cos(rad * m));g.drawLine(x + r, y + r, x + r + x1, y + r - y1);g.setColor(Color.YELLOW);// 按时间画时针x1 = (int) ((0.4 * r) * Math.sin(rad * h));y1 = (int) ((0.4 * r) * Math.cos(rad * h));g.drawLine(x + r, y + r, x + r + x1, y + r - y1);g.setColor(Color.GREEN);// 显示时间Calendar now1 = Calendar.getInstance();g.drawString(now1.get(Calendar.HOUR_OF_DAY) + ":"+ now1.get(Calendar.MINUTE) + ":"+ now1.get(Calendar.SECOND), 0, 10); }public void run() {// 运行时钟while (true) {try {Thread.sleep(1000);// 中断一秒后重新运行} catch (Exception ex) {System.out.println(ex);}s += 6;// 秒针走6度if (s >= 360) {// 秒针走完一分钟后重置s = 0;m += 6;if (m == 72 || m == 144 || m == 216 || m == 288) {// 分针走完5分钟后重置h += 6;}if (m >= 360) {// 分针走完一小时后重置m = 0;h += 6;}if (h >= 360) {// 时针走完12小时后重置h = 0;}}this.repaint();// 重新绘制时钟}}}五、测试数据及其结果分析1时钟界面:2结果:输出正常。
南邮Java实验报告1-综合图形界面程序设计
南邮Java实验报告1-综合图形界面程序设
计
自查报告。
在本次综合图形界面程序设计的实验中,我使用Java语言完成
了一个简单的图形界面程序。
在完成实验过程中,我对自己进行了
一些自查,总结如下:
1. 程序功能完整性,在设计程序时,我充分考虑了程序的功能
完整性,确保程序能够实现预期的功能。
我在自查过程中,对程序
进行了多次测试,确保程序的各个功能模块都能正常运行。
2. 代码规范性,我在编写代码的过程中,遵循了Java编程规范,确保代码的可读性和可维护性。
在自查过程中,我对代码进行
了排版和注释,确保代码的规范性。
3. 用户体验,在设计图形界面时,我考虑了用户体验,确保界
面简洁明了,操作方便。
在自查过程中,我对界面进行了多次优化,确保用户能够顺利使用程序。
4. 错误处理,在程序中,我考虑了各种可能出现的错误情况,
并进行了相应的错误处理。
在自查过程中,我对程序进行了多次异
常测试,确保程序能够正确处理各种异常情况。
在自查过程中,我发现了一些问题,并及时进行了修改和优化。
通过本次自查,我对自己的程序设计能力有了更深入的认识,也提
高了对程序质量的要求。
在今后的学习和工作中,我将继续努力,
不断提升自己的编程能力和程序设计水平。
java多线程的实验报告
java多线程的实验报告《Java多线程的实验报告》在当今的计算机科学领域中,多线程编程已经成为一种非常重要的技能。
Java作为一种流行的编程语言,也提供了丰富的多线程编程支持。
本文将介绍一些关于Java多线程的实验报告,以便更好地理解和掌握这一技术。
首先,我们需要了解什么是多线程编程。
简单来说,多线程编程就是在一个程序中同时执行多个线程,每个线程都可以独立执行不同的任务。
这种并发执行的方式可以提高程序的性能和响应速度,特别是在处理大量的并行任务时。
在Java中,我们可以通过创建Thread类的实例来实现多线程编程。
例如,我们可以创建一个继承自Thread类的子类,并重写其run()方法来定义线程的执行逻辑。
然后,我们可以通过调用start()方法来启动该线程。
另外,我们还可以实现Runnable接口,并将其作为参数传递给Thread类的构造函数来创建线程。
接下来,让我们来看一些关于Java多线程的实验报告。
在实验中,我们可以通过创建多个线程来模拟并发执行的场景,并观察它们之间的交互和竞争情况。
我们还可以使用synchronized关键字来保护共享资源,以避免线程之间的竞争条件。
此外,我们还可以使用wait()和notify()方法来实现线程之间的协作和通信。
在实验中,我们还可以使用一些工具来帮助我们分析和调试多线程程序。
例如,我们可以使用Java线程监视器来监控线程的状态和执行情况。
我们还可以使用调试器来跟踪线程的执行轨迹和查找潜在的问题。
这些工具可以帮助我们更好地理解和掌握多线程编程的技术。
总之,Java多线程编程是一项非常重要的技能,它可以帮助我们更好地利用计算机的性能和资源。
通过实验和实践,我们可以更好地理解和掌握这一技术,从而编写出高效、稳定的多线程程序。
希望本文的实验报告可以帮助读者更好地理解和应用Java多线程编程技术。
java多线程程序设计实验总结
java多线程程序设计实验总结Java多线程程序设计实验总结一、引言多线程编程是现代计算机科学中的重要概念之一,它充分利用了计算机的多核心处理能力,提高了程序的执行效率。
本文将总结Java 多线程程序设计实验的相关内容,包括实验目的、实验过程、实验结果以及实验总结。
二、实验目的本次实验的主要目的是掌握Java多线程编程的基本概念和技巧,了解多线程程序的执行流程和调度机制,培养并发编程的思维方式,提高程序的并发性能。
三、实验过程1. 创建线程在Java中,可以通过继承Thread类或实现Runnable接口来创建线程。
实验中,我们使用了实现Runnable接口的方式创建线程,因为Java支持多重继承,通过实现接口可以更好地复用代码。
2. 线程同步多线程编程中,线程之间的数据共享是一个重要的问题。
为了避免竞态条件(Race Condition)和死锁(Deadlock)等问题,我们需要对共享变量进行同步。
实验中,我们使用了synchronized关键字和Lock接口来实现线程同步,确保多个线程能够正确地访问共享资源。
3. 线程通信在多线程编程中,线程之间需要进行通信,以实现数据的交换和协作。
实验中,我们使用了wait、notify和notifyAll方法来实现线程的等待和唤醒,以及线程之间的通信。
4. 线程池线程池是多线程编程中常用的一种技术,它可以有效地管理线程的创建和销毁,提高程序的性能和稳定性。
实验中,我们使用了ThreadPoolExecutor类来创建线程池,并通过调整线程池的参数来优化程序的执行效率。
四、实验结果通过对多线程程序的设计和实现,我们成功地实现了多线程的并发执行,并通过实验测试了程序的性能和稳定性。
实验结果表明,多线程程序在处理大量数据和复杂计算时具有明显的优势,可以大幅度提高程序的执行效率。
五、实验总结1. 多线程编程是一种高效利用计算机资源的方式,可以提高程序的并发性能和响应速度。
java实验四实验报告
}
编译:javac TwoThread.java
解释执行:java TwoThread
运行后结果:
1、用创建Thread类的子类的方法实现多线程:
源程序:
class FruitThread extends Thread
{
public FruitThread (String str)
{
super(str);
}
public void run()
{
for(int i=0;i<5;i++)
{
System.out.println(i+""+getName());
T2.start();
}
}
编译:javac C.java
解释执行:java RunThread
运行后结果:
c源程序:
class run1Thread implements Runnable
{
public void run()
{
System.out.println("This is Runnable");
outputClass(String s){
name=s;
}
public void run(){
for(int i=0;i<3;i++){
System.out.println(name);
Thread.yield();
}
}
}
class runThreads{
public static void main(String args[]){
try
{
sleep((int)(Math.random()*1000));
java多线程实验报告
java多线程实验报告Java多线程实验报告引言:多线程是计算机科学中的重要概念之一,它能够提高程序的执行效率和并发性。
在本次实验中,我们通过使用Java编程语言,探索了多线程的概念和实现方法。
本报告将详细介绍我们的实验过程、实验结果以及对多线程的理解和应用。
一、实验目的多线程是现代计算机系统中的重要组成部分,它可以使程序在同一时间内执行多个任务,提高系统的并发性和响应能力。
本次实验的目的是通过编写Java程序,实现多线程的应用,并对多线程的性能和效果进行评估。
二、实验环境和工具为了完成本次实验,我们使用了以下环境和工具:1. Java开发工具包(JDK):用于编写和编译Java程序。
2. Eclipse集成开发环境(IDE):用于编写、调试和运行Java程序。
3. 计算机硬件:一台配置良好的计算机,包括CPU、内存和硬盘等。
三、实验设计与实现我们设计了一个简单的多线程实验,通过创建多个线程来模拟并发执行的情况。
具体实现如下:```javapublic class MultiThreadDemo extends Thread {private String threadName;public MultiThreadDemo(String name) {threadName = name;}public void run() {System.out.println("Thread " + threadName + " is running.");try {for (int i = 5; i > 0; i--) {System.out.println("Thread " + threadName + ": " + i);Thread.sleep(1000);}} catch (InterruptedException e) {System.out.println("Thread " + threadName + " interrupted."); }System.out.println("Thread " + threadName + " exiting.");}public static void main(String[] args) {MultiThreadDemo thread1 = new MultiThreadDemo("Thread 1"); MultiThreadDemo thread2 = new MultiThreadDemo("Thread 2"); thread1.start();thread2.start();}}```在上述代码中,我们创建了一个名为MultiThreadDemo的类,继承自Thread 类。
南邮Java实验报告1-综合图形界面程序设计
南邮Java实验报告1-综合图形界面程序设计英文回答:In this Java experiment, we are tasked with designing a comprehensive graphical user interface (GUI) program. The program should incorporate various GUI components such as buttons, text fields, labels, and menus. The goal is to develop a user-friendly and interactive interface that allows users to interact with the program effectively.To begin, we create a new Java project and design the layout of our GUI. We use a combination of Swing and AWT components to create a visually appealing and functional interface. We add buttons for user input, text fields for data entry, labels for providing information, and menus for organizing program options.Next, we implement the functionality of each GUI component. We use event listeners to handle userinteractions such as button clicks, text field changes, and menu selections. When a button is clicked, the program performs a specific action, such as displaying a message or opening a new window. Text fields allow users to enter data, which can be validated and processed by the program. Labels provide information to the user, while menus offer a structured way to access different program features.To enhance the user experience, we incorporateadditional features such as error handling, input validation, and customization options. Error handling ensures that the program responds gracefully to invaliduser input or unexpected events. Input validation checksthe validity of user input before proceeding with the program's execution. Customization options allow users to personalize the GUI according to their preferences, such as changing the color scheme or font size.By incorporating these elements, we create a comprehensive and user-friendly GUI program that meets the specified requirements. The program is responsive,intuitive, and provides a seamless user experience.中文回答:在这次 Java 实验中,我们的任务是设计一个综合的图形用户界面(GUI)程序。
java线程的创建与撤销实验报告
java线程的创建与撤销实验报告Java线程的创建与撤销实验报告一、引言线程是计算机程序并发执行的基本单位,它可以让程序同时执行多个任务,提高程序的性能和效率。
Java作为一种面向对象的编程语言,提供了丰富的线程操作类和方法,使得线程的创建与撤销变得更加简单和灵活。
本实验报告将详细介绍Java线程的创建与撤销的实验过程和结果。
二、实验目的1. 了解Java线程的基本概念和原理;2. 学习使用Java提供的线程操作类和方法;3. 掌握Java线程的创建与撤销的方法和技巧。
三、实验步骤与结果1. 创建线程在Java中,可以通过继承Thread类或实现Runnable接口来创建线程。
本实验中选择实现Runnable接口的方式来创建线程。
定义一个实现Runnable接口的类MyThread,重写run()方法,在该方法中编写线程的执行逻辑。
```javapublic class MyThread implements Runnable {public void run() {System.out.println("线程正在执行...");}}```接下来,在主线程中创建并启动线程。
```javapublic class Main {public static void main(String[] args) {MyThread myThread = new MyThread();Thread thread = new Thread(myThread);thread.start();}}```运行程序,可以看到输出结果为"线程正在执行...",说明线程创建成功并开始执行。
2. 撤销线程Java提供了stop()方法来撤销线程,但该方法已被废弃,不推荐使用。
为了安全地撤销线程,可以使用一个boolean类型的变量来控制线程的执行状态。
在MyThread类中添加一个boolean类型的成员变量isRunning,并在run()方法中使用该变量来控制线程的执行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5
} public void run() {
while (true) { try { Thread.sleep(1000); //休眠一秒 } catch (Exception ex) {
}
second += 6; //每一秒,秒针动 6 度
if (second == 60 || second == 120 || second == 180 || second == 240 || second == 300) {
x1 = (int)((r - j) * Math.sin(rad * d)); y1 = (int)((r - j) * Math.cos(rad * d)); g.drawString(".", x + r + x1 - 1, x + r - y1 + 1); } d += 6; } g.setColor(c);
//分针 g.setColor(Color.BLUE); x1 = (int)((r - r / 2.5) * Math.sin(rad * minute)); y1 = (int)((r - r / 2.5) * Math.cos(rad * minute)); g.drawLine(x + r, y + r, x + r + x1, y + r - y1);
2
// cp.setBackground(Color.blue); this.add(cp); this.setSize(200, 200); this.setLocation(300, 200); this.setTitle("小时钟"); this.setVisible(true); this.setResizable(false);//不可放大 //this.setBackground(Color.MAGENTA); } public static void main(String[] s) { new Clock(); } }
class ClockPaint extends JPanel implements Runnable { int x, y, r; int hour, minute, second; //时,分,秒 final double rad = Math.PI / 180; public ClockPaint(int x, int y, int r) { this.x = x; this.y = y; this.r = r; Calendar now = new GregorianCalendar(); //获得时间转换成度数 second = now.get(Calendar.SECOND) * 6; minute = now.get(Calendar.MINUTE) * 6; hour = (now.get(Calendar.HOUR_OF_DAY) - 12) * 30 +
minute += 1; //每 10 秒,分针动 1 度
}
//大于一分钟,分针和时针开始出现改变
if (second == 360) {
second = 0;
minute += 1;
288) {
if (minute == 72 || minute == 144 || minute == 216 || minute ==
实 验报 告
(2016 学年 第 1 学期 )
课程名称: 实验名称: 实验时间: 指导单位: 指导老师:
学生姓名: 学院(系):
Java 语言 线程程序设计
班级学号: 专 业:
1
实验名称 线程程序设计
指导老师
实验类型
实验学时 2 实验时间
一、 实验目的和要求
本实验旨在通过实验,培养学生将 JAVA 线程的相关知识点(包 括线程调度,线程同步等)有机结合并加以综合应用,在实验中设计 多线程程序的能力。
四、 实验原理(源代码)
代码: package cn.zhang.experiment_4; import java.awt.*; import javax.swing.*; import java.util.*;
public class Clock extends JFrame { public Clock() { ClockPaint cp = new ClockPaint(20, 20, 70);
二、 实验环境(实验设备)
PC 微型计算机系统,Microsoft Windows 操作系统,SUN Java Development Kit 开发工具包,NetBeans 开发工具。(本人使用 IDE 为 Windows 下 Eclipse,jdk 为 8.0 版本)
三、 实验内容
设计和编写一个编写一个指针式时钟程序,应用线程实现时钟的 走动。
4
//数字 g.setColor(Color.BLACK); int d = 28; for (int i = 1; i <= 12; i++) {
x1 = (int)((r - 10) * Math.sin(rad * d)); y1 = (int)((r - 10) * Math.cos(rad * d)); g.drawString(i + "", x + r + x1 - 4, x + r - y1 + 5); d += 30; }
hour += 6;
}
if (minute >= 360) {
minute = 0;
hour += 6;
}
if (hour >= 360) {
hour = 0;
}
}
6
this.repaint(); } } }
五、测试数据及结果分析
测试数据:
六、实验总结
成绩
批阅人
日期
7
//刻度线 d = 0; for (int i = 0; i < 60; i++) {
int len = 0; //控制每个分割点的长度,数字点上的分割线长一点 if(d % 30 == 0) {
len = 5; } else {
len = 2; } for (int j = 1; j <= len; j++) {
now.get(Calendar.MINUTE) / 12 * 6; Thread t = new Thread(this);
3
t.start(); }
public void paint(Graphics g) { super.paint(g); Color c=g.getColor(); g.setColor(Color.WHITE); g.fillRect(0, 0, r * 3, r * 3); g.setColor(Color.BLACK); g.drawOval(x, y, r * 2, r * 2);
//秒针 g.setColor(Color.RED); int x1 = (int)((r - 10) * Math.sin(rad * second)); int y1 = (int)((r - 10) * Math.cos(rad * second)); g.drawLine(x + r, y + r, x + r + x1, y + r - y1);