方式一:通过继承Thread 类实现
实现步骤:
- 创建新的类继承Thread类
- 在新的类中重写run()方法来描述线程的任务信息
- 创建新类对象调用Thread类中的start()方法来开启线程
示例代码如下:
/**
* java 线程实现方式一 ,继承Thread 类
*/
public class ThreadDemo1 {
//java 会把main方法中内容放入主线程中(交给CPU)运行
//当程序运行时会把main方法中的内容交给底层的主线程来执行
public static void main(String[] args) {
//创建代表线程的类的对象
TDemo t = new TDemo();
//开启线程
//t.start();(2个线程:主线程+t 对象的线程)
//调用TDemo 中的run 方法,相当于都是主线程的东西
//并没有开启线程,就是执行主线程(只有一个主线程,没有体现出多线程)
t.run();
//线程不会回头执行
for (int i=20;i>0;i--){
System.out.println("main:"+i);
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//代表线程的类--描述线程的任务信息
class TDemo extends Thread{
//重写方法
//线程具体任务信息在方法中进行描述
@Override
public void run() {
for(int i = 10;i>=0;i--){
System.out.println("i"+i);
//线程休眠
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
方式二:通过实现Runnable接口来实现
实现步骤:
- 创建新类实现Runnable接口
- 在新类中重写run()方法来描述线程的任务信息
- 利用装饰者模式来构建Thread类的对象
- 通过Thread类的对象去调用start()方法,开启线程
示例代码如下:
/**
* java 线程的实现方式二 实现Runnable 接口
*/
public class RunnableDemo {
public static void main(String[] args) {
//创建代表线程类对象
//RDemo r = new RDemo();
//创建线程对象---装饰者(Thread和RDemo都是Runnable实现类,
// 是同类对象给本类对象提供新的功能---装饰者设计模式)
Thread t = new Thread(new RDemo());
//Thread 类提供开启线程的方法
t.start();
//主线程方法
for (int i=20;i>0;i--){
System.out.println("main:"+i);
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//定义代表线程的类,描述线程的任务信息
class RDemo implements Runnable{
//重写run方法--描述线程的内容
@Override
public void run() {
for (int i=10;i>0;i--){
System.out.println("run:"+i);
try {
//java.lang.Thread ,不用导包,直接调用其静态方法
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}