1.为什么有多线程?
目前学习技术--可以完成项目--目前编写的代码都是从前往后顺序执行---这样会出现问题
---执行效率低
当前面的代码执行过程中遇到阻碍--停顿执行--后面的业务代码也必须等着
问题:所有的代码排成一队,相互等待执行
解决方法:能不能把队中没有联系的分开,排成多对,一起执行------java提供了技术--多线程机制
2.并行和并发概念
并行:指两个或者多个事件在同一时刻一起运行【同时】
并发:指两个或多个事情在同一时间段内交替运行
顺序执行:A执行完B才执行,等B执执行完C才执行......
3.线程和进程概念
进程:计算机系统中一个独立应用程序就是一个进程【之前】,当前优化程序执行【一个应用
程序可能包含多个进程】,计算机对于每一个进程分配相应资源【cpu+内存】
线程:负责进程执行过程,是进程一个执行单元,一个进程可以包含多个线程,至少包含一个
主线程。
多个线程共享进程资源。
4.任何进行线程调度和资源分配
进程获取操作系统分配资源---一个进程一份
一个进程中可以有多个线程---多个线程共享进程资源
进程就会把资源使用时间线上切割时间片
线程获取时间片的方式(线程调度的方式):
平均分配调度
按照线程个数,平均分配资源使用时间
抢夺调度
给每一个线程分配设置优先级,优先级高获取资源概率高,如果优先级一样,随机分配给对应的线程
大部分都是使用抢夺方式:操作系统 java程序
5.java提供的API
Java中提供了一个类表示线程:Thread
java.lang包 线程:程序中可执行的线程,Java程序中允许并发运行多个线程
创建一个线程
编写一个类,继承Thread类,重写Thread的run方法--run方法下就是线程执行业务资源
使用:
创建线程对象,使用线程对象调用start()启动线程
提供了一个接口创建线程:Runnable
实现了runnable,不能说明当前资源是一个线程,他是遵循线程协议,表示当前资源可以
被线程加载,作为线程实现的功能使用
创建线程的方式:创建一个类,实现runnable接口,重写run方法
备注:java中本身就存在至少两个线程main主线程+垃圾回收线程
线程启动:是线程对象调用start方法,不是run方法,run方法是线程自己调用
6.探索线程中的那些事情
1)start方法和run方法
run方法,属于runnable接口,Thread类重写了run方法 Thread才有线程可以加在执行的资
源,因为线程自动调用执行run方法
start方法,用于线程启动,Thread线程类才拥有,使数组将每一个创建的线程进行存储
2)继承Thread和实现Runnable接口应该用哪一个好
Thread:
优势:继承Thread直接将业务功能类变成线程,直接进行线程相关操作
劣势:一旦发生继承,就不能再进行扩展继承其他类,继承发生后,就只一个线程类,不太
方便用作其他功能
Runnable:
优势:发生实现关系,线程资源和线程执行分开,资源类可以做出了线程以外的其他事情
发生实现,强制重写run方法 很强的提示性
发生实现,还可以继承其他的类,扩展功能
可以多个线程共用一个资源对象
缺点:需要创建线程Thread对象进行加入线程使用
总结:推荐使用实现runnable接口的方式创建线程
3)探索Runnable接口和Thread类
Runnable:
提供了一个run方法,用于被线程调用,线程调用资源的协定
Thread:
属性常量:
MAX_PRIORITY 最大优先级 10
MIN_PRIORITY 最小优先级 1
NORM_PRIORITY 默认优先级 5
构造方法
Thread() 创建默认名字的线程对象构造方法 Thread-索引
Thread(String name) 创建一个指定线程名字的线程对象
Thread(Runnable target) 创建一个加载对应资源对象的线程
Thread(Runnable target,String name) 创建一个传入资源对象和线程名字的线程对象
实现Runnable