第三十四天--终于快要完结了,javase--多线程
1,进程和进程相关概念
进程是计算机中程序关于某数据集合上的一次运行活动
是系统进行资源分配的基本单位--就是程序的执行过程
1,独立性:每一个进程都有自己的空间,在没有经过进程本身允许的情况下,一个进程不可以直接访问其他的进程空间
2,动态性:进程是动态产生,动态消亡的
3,并发性:任何进程都可以同其他进程一起并发执行
并行--在同一时刻,有多个指令在多个cup上同时执行
并发--在同一时刻,有多个指令在单个cup上交替执行
对于一个cpu来说,他是在多个进程之间轮换执行的,如果多个就可以并行多个进程
2,线程及相关概念
进程可以同时执行多个任务,每个任务就是线程
3,多线程的意义--跟写的程序有关-幕布
提高执行效率
同时处理多个任务--并发与并行也可以同时进行
4,java开启线程的方式--3个
继承Thread类
1,编写一个类,继承thread
2,重写run方法
3,将线程任务写在run方法中
4,创建线程对象
5,调用start方法开启线程
注意事项:在调用start方法的时候,会自动调用run方法
只有调用start方法,才是开启了新线程
注:java程序默认是多线程的
1,main线程
2,垃圾回收线程
实现Runnable接口--无结果返回
1,编写一个类实现Runnable接口
2,重写Run方法
3,将线程任务代码,写在run方法中
4,创建Runnable接口的实现类对象
5,创建一个线程对象,并将Runnable接口的实现类对象接入
6,使用线程对象调用start方法开启线程
既可以实现接口,也可以继承父类,更加灵活,可以开启多条线程
实现Callable接口--有结果返回
1,编写一个类实现Callable接口
2,重写call方法--此方法存在返回值
3,将线程任务代码写在call方法中
4,创建线程资源对象
5,创建线程任务对象,封装线程资源
6,创建线程对象,传入线程任务
7,使用线程对象调用start开启线程
5,Thread相关方法

休眠线程的方法
public static void sleep(long time):让线程休眠指定时间,单位为毫秒
线程调度方式
抢占式调度:谁抢到算谁的,有随机性
非抢占式调度:

线程优先级:1~10,默认为5
6,线程的安全和同步问题
安全问题出现的条件:
是多线程环境
有共享数据
有多条语句操作共享数据
同步技术:
将多条语句操作共享语句的代码锁起来,让任意时刻只能有一个线程可以执行
三种同步方案
同步代码块:
锁对象可以是任意对象,但是需要保证多条线程的锁对象,是同一把锁
同步可以解决多线程的数据安全问题,但是也会降低程序的运行效率

可以用字节码来当锁,因为类的字节码文件只有一份,也方便
同步方法
方法分为静态和非静态
静态方法的锁对象是字节码对象,非静态方法的锁对象是this

Lock锁
使用lock锁,我们可以更清晰的看到哪里加了锁,哪里释放了锁
lock是接口,不能直接创建对象


7,线程池介绍和JDK提供的线程池
将线程对象交给线程池维护,可以降低系统成本,从而提升程序的性能
系统创建一个线程的成本是比较高的,因为涉及到与操作系统的交互
当程序中需要创建大量生存期很短暂的线程时,频繁的创建和销毁线程,会严重浪费系统资源
JDK提供的线程池
Executors中提供静态方法来创建线程池
ExecutorService pool = Executors.newCachedThreadPool();
8,自定义线程池
ThreadPoolExecutor 类
参数1:核心线程数量--正式员工--不能小于0
参数2:最大线程数量--正式工+临时工--不能小于等于0而且大于等于核心线程数量
任务数量大于核心线程加队列长度的时候,创建临时线程
参数3:空闲时间--判断销毁临时线程--不能小于0
参数4:时间单位--指定一个单位--时间单位
参数5:任务队列--指定排队人数--不能为null
参数6:线程对象工厂--专门创建线程对象--不能为null
参数7:拒绝策略--不能为null
更多推荐




所有评论(0)