谈一谈你对多线程的理解

谈一谈你对多线程的理解

  1. 什么线程,线程和进程的区别是什么?
  2. 线程的生命周期有哪些?
  3. 单线程和多线程?
  4. 线程池有哪些?

1.什么线程,线程和进程的区别是什么?

线程可以看作是cpu运行的基本的基本单位,进程可以看作是运行资源的基本单位。程序的一次执行就可以看作是一个进程。进程中又包含了许多的线程,进程之间的内存不可以共享,线程之间共享进程的内存。

2. 线程的生命周期有哪些?

当我们new Thread的时候,就会首先分配内存,然后检查资源,之后创建一个线程,并且将该线程的状态改为runnable状态,当该线程获得了cpu的执行权的时候,该线程从可运行状态变成了运行状态,这个时候就有三种可能了,如果cpu的执行时间片用完了,则会重新变成可运行状态,如果被阻塞了,就会变成阻塞状态,如果该线程被销毁了或者退出主线程了,就会进入死亡状态。

3. 单线程和多线程?

单线程有两种创建方式,主要是解决CPU的使用权抢占和资源的共享发生了冲突的问题,大部分用锁机制来解决。锁的话又分为乐观锁和悲观锁,乐观锁主要是用cas来保障的,悲观锁就是我们常见的sycronized和lock。

4. 线程池有哪些?

首先线程池主要是为了解决线程创建和销毁开销大以及线程之间的管理的问题的一种解决方案。目前的线程池主要是有五种,第一种就是常见的newSinglethreadPool,这种线程池最大的线程数目是一个,所以,如果当下有工作线程在工作的话,任务只能停留在任务队列中等待该工作线程结束或者抛出异常才可以为下一个任务服务,优点就是能保证同一时刻只有一个线程在执行,而且保证顺序,不足就是对于并发来说没有优势。第二种是newFixedThreadpool,这种线程池是可以设定核心线程数目以及最大线程数目,这种线程池的原理是如果有一个任务进来,会首先判断核心线程数目是否满了,如果满了,接着判断等待队列中的线程数是否满了,如果满了,接着判断是否大于最大线程数目,如果大于则采用拒绝策略,拒绝策略也有四种,分别是如果满了,就报错,如果满了不报错,替换队列中第一个等待的线程以及用excutor来执行这个任务。第三种是cachedthreadpool,这个线程池的原理是他会尝试着缓存一个线程,数目没有限制,如果空闲的线程的时间大于一分钟,则会回收该线程。第四种是newScheduldthreadpool,这个是执行有关于短时间任务调度的线程池,平常也没有用到过。貌似java8中也出了一中线程池。

欢迎补充和指正,将不胜感激

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值