实现Runnable接口的方式更好!比如你建了一个Student要继承Person,这时候你就不能继承Thread了,只能实现接口,所以一般都实现接口的,继承有局限性。
用起来继承Thread的方法是new 继承Thread的对象,然后直接调用start,见下面的例子
实现接口的方法,要new一个实现接口的对象,在传递给Thread,在调用start,下面也给了例子。
创建线程的两种方式:
创建线程的第一种方式:继承Thread类。步骤:
1,定义类继承Thread。
2,复写Thread类中的run方法。
目的:将自定义代码存储在run方法。让线程运行。
3,调用线程的start方法,
该方法两个作用:启动线程,调用run方法。
示例:
- class Demo extends Thread
- {
- public void run()
- {
- for(int x=0; x<60; x++)
- System.out.println("demo run----"+x);
- }
- }
- class ThreadDemo
- {
- public static void main(String[] args)
- {
- Demo d = new Demo();//创建好一个线程。
- d.start();//开启线程并执行该线程的run方法。
- //d.run();//仅仅是对象调用方法。而线程创建了,并没有运行。
-
- for(int x=0; x<60; x++)
- System.out.println("Hello World!--"+x);
-
- }
- }
复制代码
创建线程的第二种方式:实现Runable接口
步骤:
1,定义类实现Runnable接口
2,覆盖Runnable接口中的run方法。
将线程要运行的代码存放在该run方法中。
3,通过Thread类建立线程对象。
4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。 Thread(Runnable target)为什么要将Runnable接口的子类对象传递给Thread的构造函数。
因为,自定义的run方法所属的对象是Runnable接口的子类对象。所以要让线程去指定指定对象的run方法。就必须明确该run方法所属对象。
(!!查API可知Runnable里面只有一个run方法,想要运行,就要被对象给Thread()让他在调用start()开启线程)
5,调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
- class Ticket implements Runnable{
- private int tick=100;
- public void run() {
- while(tick>0){
- System.out.println(Thread.currentThread().getName()+"----sale:"+tick--);
- }
- }
- }
- public class TicketDemo {
- public static void main(String[] args){
- Ticket t=new Ticket();
- Thread t1=new Thread(t,"窗口01");
- Thread t2=new Thread(t,"窗口02");
- Thread t3=new Thread(t,"窗口03");
- Thread t4=new Thread(t,"窗口04");
- t1.start();
- t2.start();
- t3.start();
- t4.start();
- }
- }
复制代码
|