方法一:
/** * 如何创建多线程 * 1.定义一个类继承Thread类 * 2.覆盖Thread类中的run方法 * 3.直接创建Thread的子类对象创建线程 * 4.调用start方法开启线程并调用线程的任务run方法执行 * @author 罗摩衔那 * */ class Demo6 extends Thread{ private String name; Demo6(String name){ super(name);//调用的是父类的Thread(String name)方法,获取的是线程名 //this.name=name; } public void run() { show(); } public void show() { for (int i = 0; i < 10; i++) { //可以通过Thread的getName获取线程的名称 Thread-(从0开始) //获取当前线程的名字 System.out.println(name+"....i"+i+" name:"+Thread.currentThread().getName()); } } } public class Demo5 { public static void main(String[] args) { Demo6 d1=new Demo6("小黑"); Demo6 d2=new Demo6("heima"); d1.start();//开启线程线程 d2.start(); System.out.println("over...."+Thread.currentThread().getName()); } }
方法二:
/** * 创建线程的第二种方式:实现Runnable接口 * * 1.定义类实现Runnable接口 * 2.覆盖接口中的run方法,将线程任务代码封装在run方法中 * 3.通过Thread类创建线程对象,并将Runnable接口的对象作为Thread类的构造函数的参数进行传递 * 为什么? 因为线程的任务都封装在Runnable接口子类对象的run方法中 * 所以要在线程对象创建时就必须明确要运行的任务 * * 4.调用线程对象的start()方法 * @author 罗摩衔那 * */ class PiKaQiu implements Runnable{//准备扩展PiKaQiu类的功能,让其中的内容可以作为线程的任务执行 //通过接口的形式完成 public void run() { show(); } public void show() { for(int i=0;i<10;i++) { System.out.println(Thread.currentThread().getName()+"...."+i); } } } public class Thead_Implement { public static void main(String[] args) { PiKaQiu p=new PiKaQiu(); /** * public Threa(Runnable target) * 分配新的Thread对象. * * Thread pkq=new PiKaQiu();拥有了run方法 */ Thread pkq=new Thread(p); Thread pkq1=new Thread(p); pkq.start(); pkq1.start(); System.out.println("aa"); } }