方式二:实现Runnable接口的方式:
* 1. 创建一个实现了Runnable接口的类
* 2. 实现类去实现Runnable中的抽象方法:run()
* 3. 创建实现类的对象
* 4. 将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象
* 5. 通过Thread类的对象调用start()。(start()1.启动当前线程2.调用当前线程的run方法)
继承Thread与实现Runnable接口的对比:
* 开发中:优先选择:实现Runnable接口的方式
* 原因:1. 实现的方式没类的单继承性的局限性
* 2. 实现的方式更适合来处理多个线程共享数据的情况。
*
* 联系:public class Thread implements Runnable
* 相同点:两种方式都需要重写run(),将线程要执行的逻辑声明在run()中。
目前两种方式,要想启动线程,都是调用的Thread类中的start()。
(数据共享时线程存在安全问题)
package main.java.ThreadImplements; /** * @Author lx * @Description:创建多线程----实现Runable接口方式 * @Date 14:28 2020/8/4 * @Version */ class RunnableTest implements Runnable{ private int ticket = 100; @Override public void run() { while (true){ if (ticket>0){ System.out.println("当前窗口为"+Thread.currentThread().getName()+"票数:" +ticket); ticket--; }else { break; } } } } public class ThreadRunnable { public static void main(String[] args) { RunnableTest runnableTest = new RunnableTest(); Thread thread = new Thread(runnableTest); Thread thread1 =new Thread(runnableTest); Thread thread2 =new Thread(runnableTest); thread.start(); thread1.start(); thread2.start(); } }