创建接口的第二种方式:实现Runnable接口
1,定义类实现Runnable接口。
2,覆盖接口中的run方法,将线程的任务代码封装到run方法中。
3,通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thread类的构造函数的参数进行传递。
因为线程的任务都封装在Runnable接口子类对象的run方法中,所以要在线程对象创建时就必须明确要运行的任务。
4,调用线程的对象的start方法开启线程。
runnable的出现,仅仅是将线程的任务进行了对象的封装。
实现runnable接口和继承Thread的区别?
实现runnable接口的好处:
1,将线程的任务从线程的子类中分离出来,进行了单独的封装。(按照面向思想的方式)
2,避免了java单继承的局限性,使用了对接口的实现。
package com;
//使用runnable方法创建线程。
class Person2 implements Runnable {
public void run() {
for(int i=0;i<10;i++){
//currentThread()返回对当前正在执行的线程对象的引用。
System.out.println(i+"ThreadName:"+Thread.currentThread().getName());
}
}
}
public class RunnableDemo {
public static void main(String[] args) {
Person2 p=new Person2();
Thread t1=new Thread(p);
Thread t2=new Thread(p);
t1.start();
t2.start();
}
}
官方给出的Runnable的定义:
public interface Runnable Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为 run 的无参数方法。
设计该接口的目的是为希望在活动时执行代码的对象提供一个公共协议。例如,Thread 类实现了 Runnable。激活的意思是说某个线程已启动并且尚未停止。
此外,Runnable 为非 Thread 子类的类提供了一种激活方式。通过实例化某个 Thread 实例并将自身作为运行目标,就可以运行实现 Runnable 的类而无需
创建 Thread 的子类。大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口。这很重要,因为除非程序
员打算修改或增强类的基本行为,否则不应为该类创建子类。
runnable接口只用一个方法run:
void run()使用实现接口 Runnable 的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用对象的 run 方法。
方法 run 的常规协定是,它可能执行任何所需的动作。
1,定义类实现Runnable接口。
2,覆盖接口中的run方法,将线程的任务代码封装到run方法中。
3,通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thread类的构造函数的参数进行传递。
因为线程的任务都封装在Runnable接口子类对象的run方法中,所以要在线程对象创建时就必须明确要运行的任务。
4,调用线程的对象的start方法开启线程。
runnable的出现,仅仅是将线程的任务进行了对象的封装。
实现runnable接口和继承Thread的区别?
实现runnable接口的好处:
1,将线程的任务从线程的子类中分离出来,进行了单独的封装。(按照面向思想的方式)
2,避免了java单继承的局限性,使用了对接口的实现。
package com;
//使用runnable方法创建线程。
class Person2 implements Runnable {
public void run() {
for(int i=0;i<10;i++){
//currentThread()返回对当前正在执行的线程对象的引用。
System.out.println(i+"ThreadName:"+Thread.currentThread().getName());
}
}
}
public class RunnableDemo {
public static void main(String[] args) {
Person2 p=new Person2();
Thread t1=new Thread(p);
Thread t2=new Thread(p);
t1.start();
t2.start();
}
}
官方给出的Runnable的定义:
public interface Runnable Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为 run 的无参数方法。
设计该接口的目的是为希望在活动时执行代码的对象提供一个公共协议。例如,Thread 类实现了 Runnable。激活的意思是说某个线程已启动并且尚未停止。
此外,Runnable 为非 Thread 子类的类提供了一种激活方式。通过实例化某个 Thread 实例并将自身作为运行目标,就可以运行实现 Runnable 的类而无需
创建 Thread 的子类。大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口。这很重要,因为除非程序
员打算修改或增强类的基本行为,否则不应为该类创建子类。
runnable接口只用一个方法run:
void run()使用实现接口 Runnable 的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用对象的 run 方法。
方法 run 的常规协定是,它可能执行任何所需的动作。