创建线程的第二中方式:
/**
*
步骤:
1定义类实现Runnable接口
2.实现Runnable接口中的run方法。
3.通过Thread类建立线程对象,并将Runnable 接口的子类对象作为实际参数传给Thread类的构造方法、
4.调用Thread类的start方法开启线程,并调用Runnable接口子类的run方法
为什么要将Runnable接口子类的对象传递给Thread类的构造方法?
因为线程的任务(要运行的代码)都封装在Runnable接口的子类对象的run方法中,所以在线程对象创建的时候就必须明确要运行的任务。
*
*/
package com.lp.ecjtu.Thread; public class HelloRunnableThread implements Runnable{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public HelloRunnableThread(String name){ this.name = name; } @Override public void run() { for(int i=0;i<=100;i++){ System.out.println(name+"运行"+i); } } public static void main(String[] args){ HelloRunnableThread h1 = new HelloRunnableThread("A"); HelloRunnableThread h2 = new HelloRunnableThread("B"); Thread t1 = new Thread(h1);//h1为传入线程构造方法的接口 Thread t2 = new Thread(h2); System.out.println("线程启动之前---》"+t1.isAlive());//测试线程是否处于活动状态 t1.start();//开启线程,进入可运行状态 System.out.println("线程启动之后---》"+t1.isAlive()); t2.start(); } }
输出:
线程启动之前---》false
线程启动之后---》true
A运行0
B运行0
B运行1
B运行2
B运行3
B运行4
B运行5
B运行6
B运行7
B运行8
B运行9
B运行10
B运行11
B运行12
B运行13
A运行1
B运行14
A运行2
B运行15