创建新执行线程有两种方法。
一种方法是将类声明为 Thread 的子类,该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。
public class Hello_Java {
public static void main(String[] args) {
UserThread t1=new UserThread("1");
UserThread t2=new UserThread("2");
t1.start();
t2.start();
}
}
class UserThread extends Thread{
int sleeptime;
public UserThread(String uid) {
super(uid);
sleeptime=(int)(Math.random()*1000);
System.out.println("线程id: "+getName()+",sleep"
+sleeptime+"毫秒");
}
public void run(){
try{
Thread.sleep(sleeptime);
}catch(InterruptedException e) {
System.err.println("error"+e.toString());
}
System.out.println("运行的线程是:"+getName());
}
}
另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动。
class UserThread implements Runnable{
int num;
UserThread(int n) {
num=n;
}
public void run( ) {
for(int i=0;i<3;i++) {
System.out.println("运行的线程:"+num);
}
System.out.println("结束 : "+num);
}
}
public class ThreadTest{
public static void main(String args[ ])
throws InterruptedException {
Thread mt1=new Thread( new UserMultThread(1));
Thread mt2=new Thread( new UserMultThread(2));
mt1.start( );
mt2.start( );
}
}
对一个线程不能调用start( )两次,否则会产生 IllegalThreadStateException异常
采用继承的方式有局限性,java只能单继承,采用实现接口更加灵活