package thread;
public class ThreadDemo1 {
/**
* 进程:是一个正在执行中的程序。
* 每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元。
*
* 线程:就是进程中一个独立的控制单元。
* 线程在控制着进程的执行。
*
* 一个进程中至少有一个线程。
*
* 扩展:其实Java VM启动不止一个线程,还有服装垃圾回收机制的线程。主函数可以认为是主线程。
*
* 1,如何在自定义的代码中,自定义一个线程。
*
* 创建线程的第一种方式:继承Thread类
* 步骤:
* 1.定义类继承Thread.
* 2.复写Thread类中的run方法。
* 目的:将自定义代码存储在run方法中,让线程运行。
* 3.调用线程的start方法。
* 该方法有两个作用:a:启动线程,b:调用run方法。
*
* 发现运行结果每一次都不同,因为多个线程都在获取CPU的执行权,CPU执行到谁,就运行谁,在某一时刻,只能有一个程序在运行。
* CPU在做着快速的切换,以达到看上去是同事运行的效果。
*
* 这就是多线程的一个特性:随机性,谁抢到,谁执行,至于执行多长,CPU决定。
*
* 为什么要覆盖run方法?
* 答:Thread类用于描述线程。该类就定义了一个功能,用于存储线程要运行的代码,该存储功能就是run方法。
* 也就是说,Thread类中的run方法,用于存储线程要运行的代码。
*
*/
public static void main(String[] args) {
Demo d = new Demo();//建立一个对象就是创建一个线程
//d.start(); //开启线程,并执行run方法
d.run(); //仅仅是对象调用方法,而线程创建了,并没有执行。
for(int i=0;i<60;i++){
sop("mian run-----"+i);
}
}
public static void sop(Object o){
System.out.println(o);
}
}
class Demo extends Thread{
public void run(){
for(int i=0;i<60;i++)
System.out.println("demo run!!!-----"+i);
}
}