精品文档
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 1
Thread t2 = new Thread(new MyThread(), "姓名"); // 创建线程2的对象,并
// 通过第二个参数将其命名为thread 2
t1.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(); // 线程trda
Thread trdb = new thread2(); // 线程trdb
public 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(" 自习时间");}
}
}
.
展开阅读全文