多线程开发和锁

进程和线程

介绍的书:
操作系统
计算机原理
数据结构
计算机网络


进程(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
可以给类,方法,代码块加锁
互斥锁(排他锁)

第一种写在方法里

第二种写在循环里,修饰代码





第一种=
关键字修饰方法:
被修饰的方法被称为同步方法,作用范围是整个方法
作用对象是调用这个方法的对象

当不同线程都访问同一个线程的同一个方法时,
后来的会等待锁被释放

第二种
关键字修饰块
作用范围是被包住的
作用对象是调用这个代码段的对象

第三种
修饰类
作用对象是这个类的所有对象

 



猜你喜欢

转载自www.cnblogs.com/lxx-1843693653/p/10883593.html