1.进程
一个独立的应用程序
操作系统多任务,一个操作系统可以同时运行多个进程,多个独立的应用程序
一个进程包含多个线程
音乐播放器:一个独立的应用程序,这个音乐是独立的应用程序,可以一边放歌曲(线程),一般播放歌词(线程)
2.线程
启动是不受程序员的控制一个存在于独立应用程序的单元。
为什么要有线程?线程作用:
1。提高程序的执行能力和性能:一个任务可以拆分给多个线程来共同完成。(例如房子有一个人打扫和多个人打扫,区别是很明显的)
2。解决应答系统服务器端阻塞的情况。socket
使用多线程:处理多线程并发的安全
* 安全:从面向对象角度,类中的属性私有,private,提高数据访问的安全性,一个线程。
* 从对线程并发角度 一个商品,抢购秒杀,多个人去枪,多个人中只能由一个人完成一件商品定制成功,没有安全的控制,会导致数据出现错误 。
3.协程
JDK8是没有协程编程,协程是个被程序员控制的一个单元,用户线程。
1.什么是主线程 Thread.currentThread().getName() 获取线程的名字
2.创建线程:5+1(lambda) 方式
2.1 继承Thread 2.2 实现Runnable 2.3 定时线程 2.4带有返回值线程 2.5 线程池
1(lambda)
线程可执行方法,线程去执行的方法 严格定义public void run()
继承Thread:
ut.start(); 启动一个线程 产生一个新的线程
ut.run(); 方法调用 main线程
线程可执行方法,线程去执行的方法 严格定义public void run()
实现Runnable:
Runnable接口是Thread的父类
用那种更好?为什么?
实现Runnale更好,还可以继承另外一个父类
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
一个线程启动完毕后,不能再次启动
JMM java内存模型 JVM java虚拟机:
n1 n2 n3.....申明的都在栈内存
线程随机的,不受程序员控制,被JVM虚拟机调度
优先级:1--10 默认为5,setPriority设置线程优先级 结果是:相对保证,不是绝对保证
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
接口同步回调 异步回调:javach8 code7 2.17上2.20
* 用户把插入的数据库的业务交给了DB类
* 插入数据库后 同步
* 插入数据同时去 异步
用户同时可以去做其它的业务
.。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
匿名内部类 lambda表达式:
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
线程的生命周期:
1 创建线程对象
2 线程进入可运行状态 可以运行,但是需要JVM来调度
3 执行run方法,进入到运行状态
4 在运行状态,对线程状态调度
5 5.线程死亡
调度:sleep() 睡眠 yeild() 让步 join() 合并 同步 通信
sleep() 睡眠
Thread指的当前正在运行的线程,让当前正在运行的线程睡眠,实际是让当前正在运行线程睡眠(不继续执行),时间到后,线程进入到可运行状态,由JVM调度
1 1 2 2
Thread-0到了3秒 可运行状态 Thread-1到了3秒 可运行状态
一个线程sleep(),一定会让出执行权给另外一个线程
yeild() 让步:
1, 1, 2, 2
1,2,1,2
让当前运行的线程让步,让出执行权
让出执行权理解:礼让 ,让的可能是:让给别人,让给自己
join() 合并:
void是个严格定义的方法,里面不可以直接用return,所以下面在用个方法来取得值
计算1-100之和是个耗时操作,thread0执行1-100的和,主线程继续往下执行。因此值还没有计算出来。
所以要合并线程:
相当于是把run方法拿到主线程这边来执行。
分两个线程去分别计算奇数和 偶数和
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
2.17下 1.00