public class Demo_01 {
public static void main(String[] args) {
/* 创建线程的方式一
* 1.继承Thread类
2.重写run方法 将线程要执行的代码 放在run方法中
3.创建对象 调用start方法 启动线程 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
* */
SonThread son = new SonThread();
son.start(); //jvm会去调用线程的run()方法 开启线程
//son.run();//错误 这种调用 叫方法的调用 不叫开启线程
for(int x=0;x<=2000;x++){
System.out.println(Thread.currentThread().getName()+":::::main:::::"+x);
}
}
}
/*
* 发现运行结果每次都不同
* 因为多个线程都在抢夺cpu的执行权 cpu执行到谁 就运行谁
* 明确一点 在某一个时刻 只能有一个程序在运行(多核除外)
* cpu在做着快速切换 已达到看上去同时运行的效果
* 我们可以形象的把线程的运行 视为 在互相抢夺cpu的执行权
* 这也就是多线程的一个特性 随机性 谁抢到就算谁的 至于执行多长时间 由cpu说了算
*
* run() 方法 和 start()方法的区别
* Thread类用于描述线程
* 该类定义了一个功能 用于存储线程要运行的代码 该存储功能就是run()方法
* 主线程 要运行的代码 jvm默认规定 是main方法中的内容
* 我们自己创建的线程 需要运行的内容一定要放在run()方法里
* start()方法 启动线程的
* */
class SonThread extends Thread{
@Override
public void run() {
for(int i=0;i<=80;i++){
System.out.println(Thread.currentThread().getName()+"....run..."+i);
}
}
}