java 创建线程
Java中,线程也是一种对象,但不是任何对象都可以成为线程。
只有实现了Runnable接口或继承了Thread类的对象才能成为线程。
继承Thread类
//格式:
class 类名 extends Thread//从Thread类扩展出子类
{属性方法修饰符 run(){//覆写Thread类里的run()方法通过线程处理的程序}
}
例子:
package com.thread;
//Thread存放在java.lang类库里,但并不需要加载java.lang类库,因为它会自动加载。
public class Test {public static void main(String args[]){new TestThread().start();//启动线程必须要调用Thread类中的start()方法,//调用了start()方法,也就是调用了run()方法。for(int i = 0; i < 5; ++i) {System.out.println("main 线程在运行");}}
}
class TestThread extends Thread
{public void run() {//run()方法是定义在Thread类里的一个方法,//因此把线程的程序代码编写在run()方法内,所做的就是覆写的操作。for(int i = 0; i < 5; ++i) {System.out.println("TestThread在运行");}}
}
/*main 线程在运行
TestThread在运行
TestThread在运行
TestThread在运行
TestThread在运行
TestThread在运行
main 线程在运行
main 线程在运行
main 线程在运行
main 线程在运行
*/
实现Runnable接口
Java程序只允许单一继承,一个子类只能有一个父类。
所以,在Java中如果一个类继承了某一个类,同时又想采用多线程技术,就不能通过继承Thread类的方法产生线程。
这时需要用Runnable接口来创建线程。
class 类名 implements Runnable//实现Runnable接口
{属性方法修饰符 run(){//覆写Thread类里的run()方法以线程处理的程序;}
}
下面的例子:
为什么实现了Runnable接口还需要调用Thread类中的start()方法才能启动多线程?
通过看JDK文档可以知道,Runnable接口中只有一个run()方法,并没有start()方法。所以要用Thread类中的start()方法来启动多线程。
Thread里有一个构造方法:public Thread(Runnable target)
,在这个构造方法中,用一个Runnable接口的实例化对象作为参数去实例化Thread类对象。
package com.thread;public class Test {public static void main(String args[]){TestThread t = new TestThread();//实例化一个TestThread类的对象new Thread(t).start();//通过TestThread类实例化一个Thread类的对象,之后调用start()方法启动多线程for(int i = 0; i < 5; ++i) {System.out.println("main 线程在运行");}}
}
class TestThread implements Runnable
{public void run() {for(int i = 0; i < 5; ++i) {System.out.println("TestThread在运行");}}
}
/*main 线程在运行
main 线程在运行
main 线程在运行
main 线程在运行
main 线程在运行
TestThread在运行
TestThread在运行
TestThread在运行
TestThread在运行
TestThread在运行
*/