进程、线程、线程池 基础知识
多线程
高效的完成某项任务
1.实现多线程的方式
继承 Thread 类 或 实现 Runnable 接口
2.start()和run()有什么不同
start()通知「线程调度器」线程已准备就绪,run()执行 启动好线程
3.线程执行式无序的
有序的输出可以使用synchronized来标记run()方法
4.线程安全
使用 Synchronized 关键字,对 方法 和 对象 加锁
Synchronized 防重入的同步锁
public static class SingleInstance{
public static SingleInstance sInstance;
pubiic static SingleInstance getInstacne(){
if(sInstance==null){
synchronized(SingleInstance.class){
if(sInstance==null){
sInstance=new SingleInstance();
}
}
}
return sInstance;
}
}
5.安全停止线程(推荐使用)
Thread.interrupt()停止一个线程
Thread.interrupted()检查当前运行这段代码的线程,是否已经被停止
this.isInterrupted()检查当前this指定的线程,是否已经被停止
6.线程间通信之等待、通知 ----“好了,我叫你”
等待wait 、通知noticy(Java自己的)–“好了,我叫你”
-
notify()并不立即释放锁,而是会优先执行完当前的同步代码,再释放锁并通知出去。
-
wait()会立即放弃锁,进入等待状态
wait/notify的缺陷:等死
wait(timeout)>>notifyAll()
7.避免死锁
单一职责
使用lock.tryLock(timeout)来替代使用的同步锁
对于数据库锁,加锁和解锁必须在一个数据库连接中
8.非安全停止线程(不推荐使用)
stop()
9.其它方法
currentThread()``````isAlive()``````sleep()``````getId()
线程池
问题:频繁地为每一个任务创建一个线程,缺乏统一管理,降低性能,并且容易出现问题。
一、线程池好处
-
对多个线程进行 统一 管理,避免资源竞争而出现的问题
-
对线程进行 复用,线程在执行完任务之后,不会立即销毁,而会等待另外的任务,避免频繁创建、销毁线程 和调用GC
-
Java提供一套完整的ExecutorService线程池创建的api,可创建多种 功能不一样 的线程池,方便使用
二、基本线程池
- ThreadPoolExecutor
- FixedThreadPool (可重用固定线程数)
适用:执行长期的任务,性能好很多
- CachedThreadPool (按需创建)
适用:执行很多短期异步的小程序或者负载较轻的服务器
- SingleThreadPool(单个核线的fixed)
适用:一个任务一个任务执行的场景
- ScheduledThreadPool(定时延时执行)
适用:周期性执行任务的场景
- 自定义PriorityThreadPool(队列中有优先级比较的线程池)
三、Java中的阻塞队列
ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列。
LinkedBlockingQueue :一个由链表结构组成的有界阻塞队列。
PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列。
DelayQueue:一个使用优先级队列实现的无界阻塞队列。
SynchronousQueue:一个不存储元素的阻塞队列。
LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。
LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。
###四、线程池的其它方法
1.shutDown() 关闭线程池,不影响已经提交的任务
2.shutDownNow() 关闭线程池,并尝试去终止正在执行的线程
3.allowCoreThreadTimeOut(boolean value) 允许核心线程闲置超时时被回收
4.submit 一般情况下我们使用execute来提交任务,但是有时候可能也会用到submit,使用submit的好处是submit有返回值。
5.beforeExecute() - 任务执行前执行的方法
6.afterExecute() -任务执行结束后执行的方法
7.terminated() -线程池关闭后执行的方法

本文详细讲解了进程、线程、线程池的基础知识,包括多线程的实现方式、线程安全、线程间通信、避免死锁的策略、线程池的类型及使用方法。探讨了如何利用线程池提高任务执行效率,避免资源浪费。
2773

被折叠的 条评论
为什么被折叠?



