1.多线程学习内容
1.线程简介
2.线程实现
3.线程状态
4.线程同步
5.生产消费者
6.高级主题
2.线程简介
多线程是指多条并行路径,多路路径同时执行
方法间的调用:普通方法调用是闭合一条路径
多线程使用:开辟了多条路径
程序、进程和线程都是什么?
1.程序:一个软件,一个app(静态概念,是代码指令)
2.进程:在操作系统中运行中的程序(动态概念,一个进程匹配一个程序),例如:用优酷看视频,就是系统中的一个进程
3.线程:一个进程有多个线程,例如:用优酷看视频,同时有图像,有声音,有弹幕,有字幕
线程和进程的区分
1.进程:作为资源分配单位
2.线程:调度和执行单位
核心概念
1.线程就是独立的执行路径
2.在程序运行时,即使没有自己创建线程,后台也会存在多个线程,如:gc线程,主线程
3.main()为主线程,为系统的入口点,用于执行整个程序
4.在一个进程中,如果开辟多个线程,线程运行由调度器安排调度,调度器是与操作系统紧密相关的,先后顺序不能人为改变
5.对于用一份资源操作时,会存在资源抢夺的问题,需要加入并发控制
6.线程会带来额外的开销,如cpu调度时间,并发控制开销
7.每个线程在自己的工作内存交互,加载和储存主内存控制不当会造成数据不一致
4.线程的创建
三种方式创建线程
1.继承Thread类
2.实现Runable接口
3.实现Callable接口(并发相关)
根据面向对象思想,多用实现,少用继承,以便达到多继承功能
例:
注:
1.执行线程时必须调用start(),加入到调度器中
2.不一定立即执行,系统安排调度分配执行
3.直接调用run(),不是开启多线程,是普通方法调用
例:通过线程,同时下载三个图片
1.下载图片工具类
2.通过线程调用三张图片
避免单继承的局限常用接口来实现多线程,还可以方便共享资源
例
注:
对比Thread和Runnable
Thread 启动线程:子类对象.start()
Runnable 启动线程:传入目标对象+Thread对象.start()
使用Callable接口创建多线程