多线程概述
程序:为了完成某个任务,完成某个功能而选择某个编程语言(例如C.Java语言Python语言等)编写的一组指令的集合,这组集合是以静态的方法存在于电脑中的.
进程程序的一次运行
进程是操作系统分配资源的最小单位,二一个进程是共享同一份内存等资源,不同的进程之间是不共享内存资源.
如果两个进程之间要进行数据交换,比较复杂,课可以通过"文件".网络通信等方式,成本高.
线程:当某个进程需要同时完成多个功能,那么可以采用多线程.
线程是CPU调度资源的最小单位,换句话说,一个进程是可以有多个线程的.
线程相当于进程中的一跳执行路径,一个进程至少有一条执行路径的,但是可以有多条执行路径.
一个线程可以创建多个对象,不止可以创建一个对象.

其中:堆,方法区中的内存是共享的,栈和程序计数器是每个线程独立
堆:对象 --------->实例变量 ,线程共享
方法区:类的信息,常量,静态等-----------> 常量,静态变量线程共享.
栈:局部变量 ---------->>局部变量是每个线程独立的

JavaApplication:至少一个main线程,但是后台(JVM)中海油别的线程,GC(Java垃圾回收),异常的监视和处理的线程,类的加载.

Java要如何开启main以外的线程?
(1)继承Thread类
(2)实现Runnable接口

继承Thread类

/** * */
package com.leiyustudy.thread;

/** * @author 雷雨 * 一.继承java.lang.Threa类 * 1.步骤 * 声明线程类,继承Thread * (2)重写run方法 * public void run(){} * run方法的方法体就是线程需要干的事情. *(3)创建线程对象 *(4)启动线程 *调用线程的smart()方法 */
public class TestMyThread {
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		//这个程序运行的结果多次运行的结果是不一致的,因为有MyThread和主(main)两个线程,两个线程在争取cpu的时候在多次运行时是不一致的,所以结果是不一致的
		MyThead my = new MyThead();
		my.start();
		
		//注意一个线程可以创建多个对象,不止可以创建一个对象.
		MyThead my2 = new MyThead();
		my2.start();
		
		for(int i =1 ;i<=100;i+=2) {
			System.out.println(i);
		}
	}	
}
class MyThead extends Thread{
	@Override
	public void run() {
		for(int i =0;i<=100;i+=2) {
			System.out.println("偶数"+i);
		}
		
	}
	
}