程序:可以理解为一组静态的代码
进程:正在进行的程序 静态的代码 运行起来
线程:正在执行程序中的小单元
1.主线程 系统线程
2.用户线程 main
3.守护线程(精灵)GC
线程--操作系统级别 CPU
如何在java中创建线程 让线程执行 多线程
掌握每一个线程的几种不同状态 状态之间如何切换
new start() CPU分配(run()) wait() exception over
创建线程---就绪状态---执行状态---等待/挂起---异常/消亡---
| |
|__________________|
notify/notifyAll
实现线程的过程 (方式1)
1.自己描述一个类
2.继承父类 Thread
3.重写run方法
4.new一个线程对象 调用start()方法 让线程进入就绪状态
实现一个多人跑步的小例子
package test0603;
public class RunningMan extends Thread{
	private String name;
	public RunningMan(){
	}
	public RunningMan(String name){
		this.name=name;
	}
	
	//重写run方法
	public void run(){
		for(int i=1;i<=100;i++){
			System.out.println(this.name+"跑到第"+i+"米");
		}
	}
}
package test0603;
public class TestMain{
	public static void main(String[] args){
		RunningMan r1=new RunningMan("张三");
		RunningMan r2=new RunningMan("李四");
		RunningMan r3=new RunningMan("王五");
		//调用start方法  让线程进入就绪状态 CPU分配执行(无序)每次执行结果不一样
		/*
		r1.start();
		r2.start();
		r3.start();
		*/
		//run()方法是顺序执行
		r1.run();
		r2.run();
		r3.run();
		
	}
} 
实现线程的过程(方式2)
1.自己描述一个类
2.实现一个父接口Runnable
3.重写run方法
4.new一个线程对象
package test0603;
public class RunningMan implements Runnable{
	private String name;
	public RunningMan(){
	}
	public RunningMan(String name){
		this.name=name;
	}	
	//重写run方法
	public void run(){
		for(int i=1;i<=100;i++){
			System.out.println(this.name+"跑到第"+i+"米");
		}
	}
}
package test0603;
public class TestMain{
	public static void main(String[] args){
		RunningMan r1=new RunningMan("张三");
		RunningMan r2=new RunningMan("李四");
		RunningMan r3=new RunningMan("王五");
		Thread t1=new Thread(r1);
		Thread t2=new Thread(r2);
		Thread t3=new Thread(r3);
		//调用start方法  让线程进入就绪状态 CPU分配执行(无序)每次执行结果不一样	
		t1.start();
		t2.start();
		t3.start();		
	}
}
原文:https://www.cnblogs.com/canglongdao/p/13040286.html