1、继承 Thread 类
线程的程序代码必须编写在 run()方法内, run() 方法是定义在 Thread 类里的一个方法, 因此把线程的程序代码编写在 run() 方法内,事实上所做的就是重写 Thread 类中 run() 方法的操作。
class 类名 extends Thread { //从 Thread 类继承出子类
属性;
方法...
修饰符run() {
//以线程处理的程序;
}
}
要启动线程必须调用 Thread 类之中的 start()方法,而调用了 start()方法,也就是调用了重写的 run()方法。
public class threadDemo extends Thread { //继承 Thread 类,此类实现了多线程
public void run() //run()方法中放置要以线程实现的代码
{
for (int i = 0; i < 10; i++) {
System.out.println("第一个线程");
}
}
}
public class Test {
public static void main(String[] args) {
new threadDemo().start(); //调用 Thread 类的 start()方法,实际上是调用 run()方法
//另一个循环输出:
for (int i = 0; i < 10; i++) {
System.out.println("第二个线程");
}
}
}
2、实现 Rannable 接口
JAVA 程序中一个子类只能有一个父类,在 Java 中如果一个类继承了某一个类,同时又想采用多线程技术时, 就不能通过继承 Thread 类产生线程,因为 Java 不允许多继承, 这时就要用通过实现 Runnable 接口来创建线程了。
class类名 implements Runnable {//实现 Runnable 接口
属性;
方法...
修饰符 run() { //重写 Runnable 接口的 run()方法
//以线程处理的程序;
}
}
public class MultiThread implements Runnable { //通过实现 Runnable 接口,实现多线程
public void run() //重写 Thread 类的 run()方法
{
for (int i = 0; i < 10; i++) {
System.out.println("Thread-One");
}
}
}
public class Test {
public static void main(String[] args) {
MultiThread thread_1 = new MultiThread(); //产生 Runnable 接口子类的实例化对象
new Thread(thread_1).start(); //通过 Runnable 接口子类对象实例化 Thread 类的对象调用
//start()方法启动多线程
//循环输出:
for (int j = 0; j < 10; j++) {
System.out.println("Thread-Two");
}
}
}
为什么实现了 Runnable 接口还需要调用 Thread 类中的 start()方法才能启动多线程呢?
在Runnable 接口中并没有 start()方法,所以一个类实现了 Runnable 接口也必须用 Thread 类中的 start()方法来启动多线程。
在Thread 类之中,有这样一个构造方法:
public Thread(Runnable target)
可以将一个 Runnable 接口的实例化对象作为参数去实例化 Thread 类对象。
在实际的开发中,提倡尽可能去使用 Runnable 接口去实现多 线程机制。
22 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!