1、继承Thread类创建线程类
通过继承Thread类创建并启动多线程的步骤如下:
- 定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务,因此把run()方法称为线程执行体;
- 创建Thread子类的实例,即创建线程对象;
- 调用线程对象的start()方法来启动该线程。
程序实现
package com.zyc.thread;
public class ThreadDemo extends Thread
{
//重写run()方法,run()方法的方法体就是线程执行体
public void run()
{
for(int i= 0;i<100;i++)
{
System.out.println(getName()+"..."+i);
}
}
public static void main(String[] args)
{
for(int i =0;i<100;i++)
{
//调用Thread的currentThread()方法获取当前线程
System.out.println(Thread.currentThread().getName()+"..."+i);
if(i==20)
{
//创建并启动第一个线程
new ThreadDemo().start();
//创建并启动第二个线程
new ThreadDemo().start();
}
}
}
}
运行结果
2、实现Runnable接口创建线程类
实现Runnable接口创建并启动多线程的步骤如下:
- 实现Runnable接口,并重写该接口的run()方法,该run()方法的方法体仍然是该线程的执行体;
- 创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象。
程序实现
package com.zyc.thread;
public class ThreadDemo implements Runnable
{
//
public void run()
{
for(int i= 0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+"..."+i);
}
}
public static void main(String[] args)
{
for(int i =0;i<100;i++)
{
//调用Thread的currentThread()方法获取当前线程
System.out.println(Thread.currentThread().getName()+"..."+i);
if(i==20)
{
ThreadDemo td = new ThreadDemo();
//创建并启动第一个线程
new Thread(td,"新线程1").start();
//创建并启动第二个线程
new Thread(td,"新线程2").start();
}
}
}
}
运行结果