您的当前位置:首页正文

java实验6桂电

2021-09-05 来源:步旅网
桂林电子科技大学

java 实验报告

实验六 多线程 辅导员意见: 计算机科学与工程学院 信息管理与信息系统专业 12003401 班第 实验小组 作者 黄桂 学号 1200340119

同作者 辅导员 实验日期 2015 年 4 月 20 日 成绩: 签 名

一、实验目的

1、掌握线程和多线程的概念。

2、掌握创建线程的两种方法及其区别。

3、了解线程的启动、终止、同步、互斥和优先级等概念。

二、实验类型:设计型 三、实验内容:

1、编写一个程序,其功能是运行之后,其中有一个线程可以输出20次你的学号,另一个线程会输出20次你的姓名。

2、编写一个图形界面程序,运行之后,让其中有一个线程能在界面上“实时”显示系统当前时间(精确到秒获取时间可查询java.util.Calendar类,它包含了多个用于获得系统时间的函数)。另让一个线程可以在界面上提示当前系统时间下用户该做什么工作(例如当程序判断出系统时间现在是8:00到9:00,则提示用户该上课;现在是23:00到8:00,则提示用户该休息。 具体测试时可以将时间段限制到秒级,以便及时查看到程序运行中提示信息的变化)。

四、运行结果。

自定义线程类

定时器类线程

五、问题与总结

本次实验的主要问题是处理自定义线程和定时器类线程,自定义线程稍微简单,定时器类线程需要涉及到图形界面的设置,这是实验三的内容,需要稍加复习,具体没多大的问题。

六、附录

//自定义线程类

class test6 implements Runnable {

public void run() {

for (int i = 1; i <= 20; i++) {

System.out.println(\"第\" + i + \"次执行线程\" + Thread.currentThread().getName());

}

}

try { }

Thread.currentThread().sleep(200); } catch (InterruptedException e) {

public static void main(String args[]) { } }

Thread t1 = new Thread(new test6(), \"1200340119\"); Thread t2 = new Thread(new test6(), \"10086\"); t1.start(); t2.start();

//定时器类线程

import java.text.SimpleDateFormat; import java.util.Calendar; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextArea;

public class test66 extends JFrame {

jfr.setSize(400, 260); jfr.setTitle(\"我的定时器\"); jfr.add(jtf1); jfr.add(jtf2); jfr.add(jl1); jfr.add(jl2); jl1.setText(\"时间\");

jl2.setText(\"安排表\");

jl1.setBounds(50, 10, 100, 30); public test66() {

jfr.setLayout(null); JFrame jfr = new JFrame();

static JTextArea jtf1 = new JTextArea(); static JTextArea jtf2 = new JTextArea(); JLabel jl1 = new JLabel(); JLabel jl2 = new JLabel();

Mythread11 t1 = new Mythread11(); Mythread12 t2 = new Mythread12();

}

}

jl2.setBounds(50, 150, 100, 30); jtf1.setBounds(100, 10, 200, 30); jtf1.setEditable(false);

jtf2.setBounds(100, 150, 200, 30); jtf2.setEditable(false); jfr.setVisible(true);

jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); t1.start(); t2.start();

public static void main(String[] args) { }

test66 ff = new test66();

class Mythread11 extends Thread {

public void run() {

SimpleDateFormat SDF = new SimpleDateFormat(

\"yyyy'年 'MM'月 'dd'日 'HH:mm:ss\");// 格式化时间显示形式 while (true) {

try {

Thread.sleep(500); // 两次显示时间之间休眠500ms (即1秒),以

便观察显示 出的时间变化

} catch (InterruptedException e) { }

class Mythread12 extends Thread {

int h, mi, s; public void run() {

while (true) {

Calendar cal = Calendar.getInstance(); h = cal.get(Calendar.HOUR_OF_DAY); mi = cal.get(Calendar.MINUTE);

}

}

}

Calendar now = Calendar.getInstance(); String time = SDF.format(now.getTime()); test66.jtf1.setText(time);

e.printStackTrace();

} }

}

s = cal.get(Calendar.SECOND); try { }

if (s >= 0 && s <= 10)

test66.jtf2.setText(\"time for up!\"); test66.jtf2.setText(\"time for dressing!\"); test66.jtf2.setText(\"time for class!\"); test66.jtf2.setText(\"time for dinner!\"); test66.jtf2.setText(\"time for study!\"); test66.jtf2.setText(\"time for rest!\"); else if (s > 10 && s <= 20) else if (s > 20 && s <= 30) else if (s > 30 && s <= 40) else if (s > 40 && s <= 50) else if (s > 50 && s <= 60)

Thread.sleep(500); e.printStackTrace();

} catch (InterruptedException e) {

因篇幅问题不能全部显示,请点此查看更多更全内容