进程和线程
介绍的书:
操作系统
计算机原理
数据结构
计算机网络
进程(Process)
是操作系统进行资源分配和调度的基本单位
windows, linux,maccOS ,dos ,Unix
如果要做进程之间的数据交换和切换,开销巨大
一个进程包含1到n线程
线程(Thread)
是CUP进行资源分配和调读 的最小单位//CUP 并行 一起运行//串行连在一起一个个执行
线程负责处理进程中的无数小任务
线程之间共享代码和数据空间
线程的切换开销小
线程创建
1.继承
2,.接口
![]()
使用接口形式创建一个任务类
要交给一个线程去执行任务
优势
1.使用接口的形式创建线程,可以让程序更加灵活
2.增强程序的健壮性,可以被多个线程共享代码
![]()
1.在一个进程中,至少会有一个主线程
2.除了主线程之外的,都可以叫做子线程
3.子线程有很多个,如果没有限制,所有子线程和主线程都并行
4.线程之间如果没有资源冲突,就各自执行互不相关
匿名内部类,可以使用接口创建一个没有类名的类
![]()
![]()
线程池(Pool)
1.最大好处节省资源,减少线程数量和创建线程的开销
2.合理管理线路的分配
1.newCachedThreadPool
创建一个带有缓存的线路池
优点
很灵活,弹性线路管理,需要多少就给多大的线路池
缺点
如果线程无线增长,会导致内存溢出
2.newFixedThreadPool
优点
创建一个固定大小的线路池,超出任务会在队列中等待
缺点
难以拓展,不支持自定义.拒绝策略
3.newScheduledThreadPool
优点
支持周期执行任务,固定大小
缺点
单线程,执行,一旦一个任务失败会影响其他任务
4. newSingThreadExecutor
优点
能够按顺序执行任务
缺点
不明白整么设计,可以使用队列来实现
5. ThreadPoolExecutor
优点
上面所有优点
缺点
没有,定义比较复杂
![]()
corePoolSize: 核心池的大小
maximumPoolSize ;池内线程的最大值
KeepAliveTime :线程的存活时间
unit :上述时间的时间单位
BlockingQueue ;队列,如果有任务需要等待线程执行,
就会临时存储在这个队列中
RejectedExecutionHandler :拒绝策略
拒绝策略
1.AbortPolicy: 丢弃任物报出异常
2.DiscardPolicy :丢弃任务,但不爆出异常
3.DiscardOldestPolicy :丢弃队列最前面的任务,尝试重新执行
4.CallerRunsPolicy :谁把任务给我,谁来执行
锁
锁测试
synchronized
可以给类,方法,代码块加锁
互斥锁(排他锁)
第一种写在方法里
第二种写在循环里,修饰代码
![]()
第一种=
关键字修饰方法:
被修饰的方法被称为同步方法,作用范围是整个方法
作用对象是调用这个方法的对象
当不同线程都访问同一个线程的同一个方法时,
后来的会等待锁被释放
第二种
关键字修饰块
作用范围是被包住的
作用对象是调用这个代码段的对象
第三种
修饰类
作用对象是这个类的所有对象
![]()