实验12:Java多线程 一、实验目的
(1)了解线程的概念。
(2)学习简单的多线程编程。 二、实验任务
(1)阅读给定的Java Application程序,按要求回答问题并写出运行结果。
(2)按要求编写一个Java Application程序,并编译、运行这个程序。 三、实验内容
1.输入下面的Java Application程序,运行该程序,并简要分析程序的运行结果。
1: class SimpleThread extends Thread { 2: public SimpleThread(String str) {
3: 【代码1】super(str); //调用其父类的构造方法 4: }
5: public void run() { //重写run方法 6: for (int i = 0; i < 10; i++) {
7: System.out.println(i + \8: //打印次数和线程的名字 9: try {
10: sleep((int)(Math.random() * 1000)); 11: //线程睡眠,把控制权交出去 12: }
13: catch (【代码2】) { } //捕获中断异常 14: }
15: System.out.println(\16: //线程执行结束 17: } 18:}
1: public class TwoThreadsTest {
2: public static void main (String args[]) { 3: new SimpleThread(\4: //第一个线程的名字为First
5: SimpleThread spt= new SimpleThread(\第 二个线程的名字为Second
6: 【代码3】spt.start(); //启动second线程 7: } 8: }
2、使用接口创建线程
1:public class MyThread2 implements Runnable【代码1】{
2:int count=1,number;
3:public MyThread2(int i){ 4:number=i; 5: System.out.println(\创建线程\+number); 6:}
7:public void run()【代码2】{//重写run()方法 8:while(true){
9: System.out.println(\线程\+number+\:计数\+count);
10: if(++count==6)return; 11:} 12:}
13:public static void main(String[] args){ 14: for(int i=0;i<5;i++)
15: new Thread(【代码3】).start(); 16: }}
3、实现两个定时线程,一个线程每隔1秒显示一次,一个线程每隔
3秒显示一次。 答:源程序:
import java.io.*;
public class Time {
static Lefthand left; //声明静态的类的对象 static Righthand right;
public static void main(String args[]) {
left=new Lefthand() ; //创建两个线程。 right=new Righthand();
left.start(); //线程开始运行后,Lefthand类中的run方法将被执行。 right.start(); } }
class Lefthand extends Thread //lefthand类继承Thread类 {
public void run() {
for(;;)
{
System.out.println(\每1秒显示一次!\
Try {
sleep(1000); //使当前活动线程睡眠1秒 }
catch(InterruptedException e){} //捕捉异常 } } }
class Righthand extends Thread {
public void run() {
for(;;) {
System.out.println(\每3秒显示一次!\Try {
sleep(3000); }
catch(InterruptedException e){} } } }
运行结果: (这一列是注释) 每1秒显示一次 每3秒显示一次 每1秒显示一次 每1秒显示一次 每3秒显示一次 每1秒显示一次 每1秒显示一次
每1秒显示一次 每3秒显示一次 每1秒显示一次 每1秒显示一次 每1秒显示一次 每3秒显示一次 每1秒显示一次 每1秒显示一次 每1秒显示一次 每3秒显示一次 每1秒显示一次 每1秒显示一次
3、创建两个线程,每个线程打印出线程名字后再睡眠,给其它线程以执行的机会,主线程也要打印出线程名字后再睡眠,每个线程前后共睡眠5次。要求分别采用从Thread中继承和实现Runnable接口两种方式来实现程序。(即写两个程序) import java.io.*;
class NameThread extends Thread{ int time; //睡眠的时间
public NameThread(String n,int t){ super(n); time=t; }
public void run(){
for(int i=1;i<=5;i++){
System.out.println(getName()+\ try{
Thread.sleep(time);
}catch(InterruptedException e){return;} } }
public static void main(String args[]){
NameThread bonnie=new NameThread(\,1000);