java的runnable接口(另一种创建线程的方式)
来源:百度文库 编辑:神马文学网 时间:2024/04/28 17:10:52
我们知道java中是不存在多继承的。那么如果一个类已经继承了一个父类,同时要实现多线程的时候,显然是不能再通过同时继承Thread类来实现了。那么应该如何实现多线程呢?
这时的解决办法就是通过直接实现接口Runnable来实现。其中run方法是这个接口Runnable中所声明的唯一的方法。
请看下面的例子:
///////实现Runnable接口的线程
public class HelloThread implements Runnable{
String message;
HelloThread(String message){
this.message=message;
}
public void run(){
/*int sleeptime=(int)(Math.random()*3000); ///A
try{ //B
Thread.sleep(sleeptime); ///C
}catch(InterruptedException e){} ///D
*/
System.out.println(message);
}
public static void main(String args[]) throws InterruptedException{
HelloThread hello1=new HelloThread("Good");
HelloThread hello2=new HelloThread("morning");
HelloThread hello3=new HelloThread("to");
Thread h1=new Thread(hello1);
Thread h2=new Thread(hello2);
Thread h3=new Thread(hello3);
h1.start();
h2.start();
h3.start();
/*hello1.join(); ////H
hello2.join(); ///I
hello3.join(); ////J
*/
try{ ///////E
Thread.sleep(1000); ///////F
}catch(InterruptedException e){ } ///G
System.out.println("you!");
}
}
说明:1、代码中绿色的字体是与文章“在java中创建和运行简单的线程”中通过继承Thread类实现多线程的代码中不同的地方,请比较理解。
2、我们调用sleep()方法的时候必须调用Thread.sleep()而不是sleep(),因为HelloThread类并不是从Thread类派生的。
3、关于线程的创建:继承Thread类的线程类在创建时直接构造一个该类实例即可。但是对于实现Runnable接口的类,要分两步实现。首先创建一个该类的实力,其次把创建的实例作为参数传递给new的Thread构造函数,则实例化的Thread对象就是创建成功的Thread实例。
4、通过调用Thread类的start方法使该线程可以运行。由上可知,对于线程的各种方法的调用都是通过Thread类或者其实例调用的。不能直接使用实现Runnable接口的类的实例调用。
这时的解决办法就是通过直接实现接口Runnable来实现。其中run方法是这个接口Runnable中所声明的唯一的方法。
请看下面的例子:
///////实现Runnable接口的线程
public class HelloThread implements Runnable{
String message;
HelloThread(String message){
this.message=message;
}
public void run(){
/*int sleeptime=(int)(Math.random()*3000); ///A
try{ //B
Thread.sleep(sleeptime); ///C
}catch(InterruptedException e){} ///D
*/
System.out.println(message);
}
public static void main(String args[]) throws InterruptedException{
HelloThread hello1=new HelloThread("Good");
HelloThread hello2=new HelloThread("morning");
HelloThread hello3=new HelloThread("to");
Thread h1=new Thread(hello1);
Thread h2=new Thread(hello2);
Thread h3=new Thread(hello3);
h1.start();
h2.start();
h3.start();
/*hello1.join(); ////H
hello2.join(); ///I
hello3.join(); ////J
*/
try{ ///////E
Thread.sleep(1000); ///////F
}catch(InterruptedException e){ } ///G
System.out.println("you!");
}
}
说明:1、代码中绿色的字体是与文章“在java中创建和运行简单的线程”中通过继承Thread类实现多线程的代码中不同的地方,请比较理解。
2、我们调用sleep()方法的时候必须调用Thread.sleep()而不是sleep(),因为HelloThread类并不是从Thread类派生的。
3、关于线程的创建:继承Thread类的线程类在创建时直接构造一个该类实例即可。但是对于实现Runnable接口的类,要分两步实现。首先创建一个该类的实力,其次把创建的实例作为参数传递给new的Thread构造函数,则实例化的Thread对象就是创建成功的Thread实例。
4、通过调用Thread类的start方法使该线程可以运行。由上可知,对于线程的各种方法的调用都是通过Thread类或者其实例调用的。不能直接使用实现Runnable接口的类的实例调用。
java的runnable接口(另一种创建线程的方式)
在java中创建和运行简单的线程
Java线程:新特征-有返回值的线程
Java中接口的使用
java接口的理解(1)
一道关于java线程的面试题
一道关于java线程的面试题
java线程超时控制的实现
想象历史的另一种方式
Java的代理模式(通过公共接口实现)
线程创建
Java中的线程续 - 蓝色梦想的程序人生 - CSDNBlog
java线程状态管理 - SecretValley的专栏 - CSDN博客
Java中的线程续 - 蓝色梦想的程序人生 - CSDNBlog
深入线程的wait()/notify() - 中国JAVA手机网
激励方式-母爱的另一种表达方式
Java虚拟机|JAVA线程|
Java中抽象类和接口的区别
java里抽象类和接口的区别
详细解析Java中抽象类和接口的区别
详细解析Java中抽象类和接口的区别
Java中的排序(Comparable接口)--Stevie Liu的博客
详细解析Java中抽象类和接口的区别
java接口