第一种:继承Thread类
package threads;
//通过继承Thread的方式实现线程类
public class ExtendsThread extends Thread {
public void run() {
for(int i=0;i<10;i++){
System.out.println("你好,我是通过继承Thread的线程类"+i);
}
}
public static void main(String[] args) {
new ExtendsThread().start();//启动线程
/**
* 但是大家要明白一个地方,就是在启动这个main方法的时候,相对于这个类
* 而言,其实我们开启了两条线程。一条是main方法,一条是ExtendsThread类的run方法
* 这条线程。通过CUP的切换同时在运行。
*/
for(int i=0;i<10;i++){
System.out.println("我是主函数main的线程"+i);
}
}
}
运行结果:
我是主函数main的线程0
我是主函数main的线程1
我是主函数main的线程2
我是主函数main的线程3
我是主函数main的线程4
你好,我是通过继承Thread的线程类0
你好,我是通过继承Thread的线程类1
你好,我是通过继承Thread的线程类2
我是主函数main的线程5
我是主函数main的线程6
我是主函数main的线程7
我是主函数main的线程8
我是主函数main的线程9
你好,我是通过继承Thread的线程类3
你好,我是通过继承Thread的线程类4
你好,我是通过继承Thread的线程类5
你好,我是通过继承Thread的线程类6
你好,我是通过继承Thread的线程类7
你好,我是通过继承Thread的线程类8
你好,我是通过继承Thread的线程类9
这里的结果不是固定的,根据你自己电脑的性能的不同运行的结果也都是不同的。
但是有一点是可以确定的,他们都是同时运行的两条线程.......这就是多线程的运用吧。
缺点:就是当你要把一个了定义成多线程类是,就不能在继承其他的类了。
第二种方式:实现Runnable接口的方式。
package threads;
//通过实现Runnable接口的形式定义线程类
public class RunnableThread implements Runnable {
public void run() {
for(int i=0;i<10;i++){
System.out.println("你好,我是通过实现Runnable接口的线程类"+i);
}
}
public static void main(String[] args) {
// new ExtendsThread().start();//继承Thread启动线程的方式
RunnableThread rt = new RunnableThread();//实现Runnable接口的实现方式
Thread t = new Thread(rt);
t.start();
/**
* 但是大家要明白一个地方,就是在启动这个main方法的时候,相对于这个类
* 而言,其实我们开启了两条线程。一条是main方法,一条是RunnableThread类的run方法
* 这条线程。通过CUP的切换同时在运行。
*/
for(int i=0;i<10;i++){
System.out.println("我是主函数main的线程"+i);
}
}
}
结果:
你好,我是通过实现Runnable接口的线程类0
你好,我是通过实现Runnable接口的线程类1
我是主函数main的线程0
我是主函数main的线程1
我是主函数main的线程2
我是主函数main的线程3
我是主函数main的线程4
我是主函数main的线程5
我是主函数main的线程6
我是主函数main的线程7
你好,我是通过实现Runnable接口的线程类2
我是主函数main的线程8
你好,我是通过实现Runnable接口的线程类3
我是主函数main的线程9
你好,我是通过实现Runnable接口的线程类4
你好,我是通过实现Runnable接口的线程类5
你好,我是通过实现Runnable接口的线程类6
你好,我是通过实现Runnable接口的线程类7
你好,我是通过实现Runnable接口的线程类8
你好,我是通过实现Runnable接口的线程类9
这种方式,可以很好的解决了,多继承的问题。
转自:http://javaforyejin.sinaapp.com/?p=74