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) {
因篇幅问题不能全部显示,请点此查看更多更全内容