java并发编程实践(3)

1、进程与线程
进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是竟争计算机系统资源的基本单位,线程是进程的最小调度单位。所有的线程共享同一个进程的系统资源。进程在执行过程中拥有独立的内存单元。 比如学校里仅有一个体育馆(单核),学校内有多个学院,各学院要举办运动会,但是为了避免冲突,体育馆每次只能提供给一个学院举办运动会,并只给一天时间,各学院的运动会有各种比赛项目,各个比赛项目可以同时进行,一天时间到后,学校会将体育馆的使用权分配给另一个学院……在这里体育馆相当于系统资源,各学院相当于一个进程,学院运动会中的各种比赛项目相当于线程。系统资源分时复用,每个进程占有系统资源一段时间片,时间片到了之后,让出系统资源,让其他进程使用。
2、Runnable和Callable
Runnable和Callable都代表线程要执行任务,线程调用start方法后会自动启动Runnable或Callable的run方法或call方法,其中run方法没有返回值,而调用Callable的call方法有返回值,返回装载值的Future对象,此外call方法能够抛出异常。
3、线程池(Executor)
1)、无限创建线程造成系统开销特别大;
2)、线程过多影响系统性能,竞争系统资源,会导致大量的线程闲置等待;
线程池实现原理是一个生产者-消费者模式,生产者提交任务到一个阻塞队列,消费者线程即线程池中线程执行任务。线程池使任务和执行任务的线程实现了解耦。当线程池中的工作队列满时,线程池采取饱和策略相应任务的提交,常用的饱和策略:
a、“中止”策略:当工作队列满时,拒绝新提交的任务,抛出
RejectedExecutionException;
b、“DiscardPolicy”:新提交的任务无法 保存到队列中等待,被抛弃;
c、“DiscardOldestPolicy”:下一个被执行的任务被抛弃,尝试提交信任务;
d:”CallerEunsPolicy”:将提交的任务返回给调用者线程执行;
3、线程池的接口及实现
Executor(接口)—》ExecutorService(接口)—》AbstractExecutorService(抽象类)—》ThreadPoolExecutor(实现类)
ExecutorService接口新增的方法用于管理线程池的生命周期,如shutdown方法不接受新的任务,等待已提交的任务执行完后,关闭线程池;shutdownNow方法尝试取消正在执行的任务,取消正在等待的任务,关闭线程池等等;
线程池类型:(通过Executors里的静态方法创建)
1)、newCachedThreadPool创建一个可缓存的线程池,当提交的任务大于线程池活跃的线程,即可以创建新的线程,当线程闲置,则可回收线程;
2)、newFixedThreadPool创建一个大小固定线程池,如果某个线程发生异常,则新创建一个线程来补充
3)、newSingleThreadExecutou,创建一个单线程的线程池来执行任务;
4)、newSheduledThreadPool:创建固定大大小的线程池,且能够定时或者延时执行任务;
4、管理线程池中的任务(Future)
Future(接口)—》RunnableFuture(同时继承Runnable接口)—》FutureTask(实现类)其cancle方法,若任务还没有执行,则被取消不再执行,若在执行则请求中断;
5、饥饿死锁
单线程环境下,在一个线程中提交另一个任务,当前任务等待被提交的任务被执行,而被提交的任务等待当前任务执行完成而引发的死锁问题。在多线程环境下,线程由于等待其他线程提供的资源或条件而发生阻塞,也可能发生解死锁,比如三个线程A、B、C,A等待B的执行结果,B等待C的执行结果,C等A的执行结果,导致线程A、B、C都阻塞。
6、线程池中的重要参数
1)CorePoolSize:基本线程池大小,只有工作队列满时才创建更多的线程来执行任务;
2)MaximumPoolSize:最大线程数目,表示可以同时活动的线程上限、
3)KeepAliveTime:生存时间,当线程空闲时间超过这个空闲时间,线程被标记为可回收,当线程池中的线程超过基本大小,则该线程被中止;
4)、BlockingQueue:工作队列,用于存放提交的任务,(ArrayBlockingQueue、LinkedBlockingQueue,SynchronousQueue)
SynchronousQueue同步队列,提交的任务必须有一个线程去执行,如果线程池中的线程数目小于最大可活跃线程数,则创建新的线程执行任务,否则任务被拒接;
5)RejectedExecutionHandler:选择饱和策略,即当工作队列满时,用何种方式响应新提交的任务;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值