/*
多线程的创建,方式一: 继承于Thread类
1.创建一个继承于Thread类的子类
2.重写Thread类的run() —> 将此线程执行的操作声明在run()中
3.创建Thread类的子类的对象
4.通过此对象调用start()
例子:遍历100以内的所有的偶数
*
说明两个问题:
问题一:我们启动一个线程,必须调用start(),不能调用run()的方式启动线程
问题二:如果再启动一个线程,必须重新创建一个Thread子类的对象,调用此对象的start()
package com.atguigu.java1;
/**
* 多线程的创建,方式一: 继承于Thread类
* 1.创建一个继承于Thread类的子类
* 2.重写Thread类的run() --> 将此线程执行的操作声明在run()中
* 3.创建Thread类的子类的对象
* 4.通过此对象调用start()
* <p>
* 例子:遍历100以内的所有的偶数
*
* @author Dxkstart
* @create 2021-05-05 20:17
*/
public class ThradTest {
public static void main(String[] args) {
//3.创建Thread类的子类的对象
MyThread my = new MyThread();
//4.通过此对象调用start(): ①启动当前线程 ②调用当前线程的run()
my.start();//线程1
//问题一:我们不能通过直接调用run()的方式启动线程
// my.run();
//问题二:再启动一个线程,遍历200以内的偶数。不可以还让已经start()的线程去执行。
// my.start(); 报错:IllegalThreadStateException
//我们需要重新创建一个线程的对象
MyThread my2 = new MyThread();
my2.start();//线程2
//如下的方法仍然是main线程中执行的
for (int i = 0; i <= 200; i++) {
if (i % 2 == 0) {
System.out.println(Thread.currentThread().getName() + ":" + i + "********mian()******** ");
}
}
}
}
//1.创建一个继承于Thread类的子类
class MyThread extends Thread {
// 2.重写Thread类的run()
@Override
public void run() {
for (int i = 0; i <= 200; i++) {
if (i % 2 == 0) {
System.out.println(Thread.currentThread().getName() + ":" + i);//获取当前线程的名字
}
}
}
}