/*
* 进程:是正在执行中的程序
* 每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者叫一个控制单元
*
* 线程:就是进程中的一个独立的控制单元
* 线程在控制着进程的执行
*
* 一个进程中至少有一个线程
*
* java虚拟机启动的时候会有一个进程java.exe
*
* 该进程中至少有一个线程负责java程序的执行
* 而且这个线程运行的代码存在于main()中
* 该线程称之为主线程
*
* 扩展:其实更细节说明虚拟机,jvm启动不止一个线程,还有负责垃圾回收机制的线程
*
* 在自定义代码中自定义线程
* java已经提供了对线程这类事物的描述,就Thread类
* 创建线程的第一种方法:继承thread类
* 步骤:
* 1、定义类继承Thread类
* 2、复写Thread类中的run方法(将自定义代码存储在run方法中,让线程运行)
* 3、调用线程的start方法
* 该方法的作用:启动线程,调用run方法
*
* 覆盖run方法原因
* Thread类用于描述线程
* 该类定义了一个功能,用于存储线程要运行的方法,该存储功能就是run方法
* 也就是说thread类中的run方法,用于存储线程要运行的方法
*
* 创建线程的第二种方法:实现runnable接口
* 步骤:
* 1、定义类实现runnable接口
* 2、覆盖runnable接口中的run方法
* 3、通过thread类建立线程对象
* 4、将runnable接口的子类对象作为实际参数传递给thread类的构造函数
* 5、调用thread类的start方法开启线程,并调用runnable接口子类的run方法
*
* 实现方式和继承方式的区别
* 实现方式好处:避免了单继承的局限性,在定义线程时,建议使用实现方式
*
* 继承方式:线程代码存放在thread子类run方法中
* 实现方式:线程代码存放在接口的子类run方法中
*
* 运行结果每次不同
* 因为多个线程都获取cpu的执行权,cpu执行到谁,谁就运行
* 在某一时刻只能有一个程序在运行(多核除外)
* cpu在做着快速的切换,以达到看上去是同时运行的效果
* 可以形象的把多线程的运行行为看作在互相抢夺cpu资源
*
* 在这就是多线程的一个特点:随机性
*
* */
class Demo extends Thread{
public void run(){
for(int x=0;x<60;x++)
System.out.println("Demo run--"+x);
}
}
public class ThreadDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo demo=new Demo();
demo.start();
for(int x=0;x<60;x++)
System.out.println("hello world--"+x);
}
}
------------------By 仔鸡