java 编程问题 写出程序
写一个多线程类,该类的构造方法调用Thread类带字符串参数的构造方法。建立自己的线程名,然后随机生成一个休眠时间,再将自己的线程名和休眠多长时间显示出来。该线程运行后,休眠一段时间,该时间就是在构造方法中生成的时间。最后编写一个测试类,创建多个不同名字的线程,并测试其运行情况。
写一个多线程类,该类的构造方法调用Thread类带字符串参数的构造方法。建立自己的线程名,然后随机生成一个休眠时间,再将自己的线程名和休眠多长时间显示出来。该线程运行后,休眠一段时间,该时间就是在构造方法中生成的时间。最后编写一个测试类,创建多个不同名字的线程,并测试其运行情况。
答案:自定义线程类:
public class MyThread extends Thread {
protected int randomSleepTime;// 声明随机睡眠时间
public MyThread(String threadName) {
this.setName(threadName);// 继承自基类Thread的setName方法,用来设置线程名
this.randomSleepTime = (int) (Math.random() * 10000);// 随机产生10秒内时间
}
@Override
public void run() {
//打印出当前线程名字以及生成的随机睡眠时间数,单位为毫秒ms
System.out.println("线程: " + Thread.currentThread().getName()
+ " 执行run方法,生成随机睡眠时间为: " + randomSleepTime + "ms");
try {
//线程进入睡眠
System.out.println("线程: " + Thread.currentThread().getName()
+ " 开始睡眠...ZZZZZZZ");
Thread.sleep(randomSleepTime);
//线程结束睡眠
System.out.println("线程: " + Thread.currentThread().getName()
+ " 睡眠结束...");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
测试类:
public class Test {
public static void main(String[] args) {
MyThread mt1 = new MyThread("zhangsan");//实例化四个线程
MyThread mt2 = new MyThread("lisi");
MyThread mt3 = new MyThread("wangwu");
MyThread mt4 = new MyThread("zhaoliu");
mt1.start();//分别启动线程
mt2.start();
mt3.start();
mt4.start();
}
}
一次测试的结果:public class Main{//测试类
public static void main(String args[ ]){
MyThread zhang,wang,James;
zhang=new MyThread("张小红"); //新建线程
wang=new MyThread("JamsKeven");James=new MyThread("James");
zhang.start(); //启动线程
wang.start();James.start();
}
}
class MyThread extends Thread{ //Thread的子类负责创建线程对象
int sleepTime=0;
MyThread(String s){
setName(s); //调用Thread类的setName方法为线程起个名字
sleepTime=(int)(Math.random()*10000); //生成一个随机数,该值比较合适用于测试
}
public void run(){
System.out.println("当前线程名为:"+getName()+" 休眠时间为:"+sleepTime);
try
{
sleep(sleepTime);//休眠时间单位为毫秒
System.out.println(getName()+"线程休眠结束");
}
catch(InterruptedException e){}
}
}
上一个:java学后的工作领域
下一个:JAVA编程,满意追加50