线程创建方式一:继承Thread类
1.创建子类继承Thread类
2.在子类中复写run方法,把线程需要执行的任务代码放在run方法中
3.创建子类线程对象
4.调用start方式启动线程,执行任务代码
代码演示:
/*
* 继承Thread类
* */
public class MyThread extends Thread {
/*
* 覆写run方法
* */
@Override
public void run () {
// run方法中,放入任务代码
for(int i = 0; i < 100; i++){
System.out.println("子线程 第" + (i+1) + "次执行");
}
}
}
public static void main (String[] args) {
// 创建子类线程对象
MyThread myThread = new MyThread();
// 调用start 方法启动线程,执行此任务代码
myThread.start();
for(int i = 0; i < 100; i++){
System.out.println("主线程 第" + (i+1) + "次循环");
}
}
Java 使用的是抢占式调度
线程实现方式二:实现接口Runnable
1.创建实现类,实现接口Runnable接口
2.在实现类中重写run方法,把线程中需要执行的代码放入run方法中
3.创建实现类对象
4.创建Thread类对象,并传入Runnable接口的实现类对象
5.调用start方法 启动线程
代码演示:
// 创建实现类,实现Runnable接口
public class MyRunnable implements Runnable {
// 重写run方法
@Override
public void run () {
// 放入需要执行的代码
for(int i = 0; i < 100; i++){
System.out.println("子线程" + (i+1) + "次执行");
}
}
}
public static void main (String[] args) {
// 创建实现类对象
MyRunnable mr = new MyRunnable();
// 创建Thread类对象,并传入Runnable接口的实现类接口
Thread thread = new Thread(mr);
thread.start();
for(int i = 0; i < 100; i++){
System.out.println("主线程" + (i+1) + "次执行");
}
}
创建线程的方式三:匿名内部类
1.创建Runnable的匿名内部类
2.在匿名内部类中重写run方法,把线程需要执行的任务代码放入run方法中
3.创建Thread线程对象,并传入Runnable的匿名内部类对象
4.调用start方式启动线程
代码演示:
// 创建Thread线程对象,传入创建Runnable的匿名内部类,并重写run方法
Thread thread = new Thread(new Runnable() {
@Override
public void run () {
for(int i = 0; i < 100; i++){
System.out.println("子线程 第" + (i+1) + "次循环");
}
}
});
// 启动
thread.start();;
// 主线程
for(int i = 0; i < 100; i++){
System.out.println("主线程 第" + (i+1) + "次循环");
}