Java多线程:实现Runnable接口创建线程方式详解

先看例子:###

/**实现Runnable接口创建线程步骤:
 * 1、创建一个实现Runnable接口的类
 * 2、重写Runnable类中抽象的run()方法
 * 3、创建实现类的对象
 * 4、声明Thread类,同时将实现类对象作为参数传递
 * 5、用Thread类的对象调用start()
 */
//例子:多线程售票(暂未安全同步)
class MyThread implements Runnable{
    private int num = 100;
    public void run(){
        while (true){
            System.out.println(Thread.currentThread().getName()+"票号:"+num--);
            if(num == 0)
                break;
        }
    }
}
public class ThreadTest2 {
    public static void main(String[] args) {
        //m相当于是提供了线程所要执行的run(),所以可以供不同线程调用
        MyThread myThread = new MyThread();

        //将Runnable实现类的对象传递给Thread类中的Runnable类型的属性,由此调实现用
        Thread t = new Thread(myThread);
        Thread t1 = new Thread(myThread);
        Thread t2 = new Thread(myThread);
        //设置线程名
        t.setName("窗口1:");
        t1.setName("窗口2:");
        t2.setName("窗口3:");
        //通过调用start执行myThread对象的run(),实现三个线程共用一个方法,但是对象始终只有一个,记录票数的子类也只有一个
        t.start();
        t1.start();
        t2.start();
    }
}

解析:

通过源码发现Thread类也实现了Runnable接口,通过所以此创建实例的过程是一个Runnable的实现类对象(myThread),传递给另一个Runnable实现类对象(t、t1、t2)的过程,而Thread类中还定义了个Runnable类型的属性,用于配合接收Thread类的带参构造器传递过来的Runnable类型的对象,现在对象有了,要调用什么姿势还不是拍拍屁股的事情?(实际是Thread类中的run()判断出有Runnable对象传递进来了,就通过该对象调用run())

补充:忽略安全同步问题,例子实现了多线程售票,可以看出start()方法负责开启线程并调用负责线程执行内容的run()方法。

原文地址:https://www.cnblogs.com/csyh/p/12257542.html