多线程概述
程序:为了完成某个任务,完成某个功能而选择某个编程语言(例如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);
}
}
}