线程-并发

1. 进程和线程

应用:当有百万级并发量发生时,就得考虑并发程序的设计。
  进程:进程(动态)是程序(静态)在系统中运行的基本单位,进程的生命周期也是创建,运行,消亡。即从JVM视角来看进程的创建代表系统内存运行时数据区的创建。
  线程:线程存在于进程中,每个进程都有一个以上的线程,其中一个为主线程,即java编程中的main函数。每个线程共享进程创建的堆和方法区,每个线程私有自己的程序计数器,虚拟机栈和本地方法栈?(因为当一个线程执行时,就表示这个线程的字节码的运行,这就需要程序计数器的控制;当线程中有方法执行时,会在虚拟机栈中创建一个栈帧保存局部变量表,操作数栈,常量引用进行进栈和出栈,本地方法栈和虚拟机栈相似,但本地方法栈是为了服务Native方法)。
  ps:进程是独立的,进程中线程可能相互影响;虽然并发能够提高 程序的执行速度,但是也容易造成内存泄漏、死锁、线程不安全等情况

2.线程生命周期

线程有6种不同的生命周期:初始状态(线程已经被new创建,new状态中,但是还没有调用start()方法)、可运行状态(调用start()方法,处于jvm视角的runnable状态,这时线程可能在运行也可能没运行,这得看操作系统的调度,注意这时线程被抢占式调度来分配)、阻塞状态(这个线程去等待得到另一个线程的对象锁,此时线程处于阻塞状态,不活动,不消耗系统资源,当另一个线程释放该锁后,得到线程调度器的同意后线程转到可运行状态)、等待状态(此时线程会停止活动,等待其他处于可运行状态的线程发生中断通知)、计时等待状态(线程调用了一个计时参数后会处于这个状态,必须等到时间过后才能转到可运行状态)、终止状态(线程运行完毕,工作结束;一种情况是run方法执行完后死亡,另一种是没有捕获异常而死亡)。
ps:这有个线程优先级的问题,默认情况下线程继承父类线程的优先级,优先级可以用setPriority方法提高或降低优先级,注意使用优先级,因为高优先级能忽略低优先级。
ps:为啥用jvm的runnable状态直接代替操作系统的ready和running状态,因为线程最初被创建后由抢占式调度来分配运行,用的是分配时间片的方式,这时运行的时间很快,没运行的时间也快,就把runnable来替代者这两种状态了。

3. 线程属性

4个属性——线程优先级、守护线程、线程组、未捕获异常处理器
  线程优先级:默认情况下线程继承父类线程的优先级,优先级可以用setPriority方法提高或降低优先级,注意使用优先级,因为高优先级能忽略低优先级。

守护线程:守护线程是最低级的,用setDaemon方法在线程启动前标记守护线程;守护线程是为了给其他线程提供服务,所以当进程中只剩下守护线程时代表进程结束,比如计时线程,清理线程。
  线程组:
  未捕获异常处理器:

4. 死锁和避免死锁

死锁:多个线程处于阻塞状态,它们在等待释放资源,都想获取资源,但是资源都被占有,就一直处于阻塞状态,进程一直运行不能正常终止。

死锁产生的四个必要条件:

互斥条件:每个时刻一个资源只能被一个线程占用,其他线程请求使用当前资源时得等到其线程释放后才能使用。
不可剥夺条件:线程在没有使用完线程时,其他线程不能去强制得到资源,只能等到释放才能占用资源。
请求和保持条件:当前现在占用一个资源,但也能继续申请另一个资源,以前的资源还在。
循环等待条件:线程等待队列中当前线程等待前一个线程释放资源,前一个线程也在等待他前一个线程释放资源,这就是循环等待条件。

死锁预防:

破坏死锁产生的后三个必要条件,因为第一个是不可避免的。
  破坏-不可剥夺条件:当前线程本身占用部分资源,但处于等待状态,这时他会释放占有资源,等一次性得到全部资源后再运行线程。
  破坏-请求和保持条件:有两种情况:第一种是本身有点资源,但是必须释放那点资源后等到一次性获取全部资源后再运行,第二种是一开始就没有资源,直接获取全部资源后运行。
  破坏-循环等待条件:这个就是给线程安排顺序,这样占用资源才能合理有效的进行。

死锁避免:

基本思想:系统会对线程申请资源进行检查,当检查线程得到资源后会发生死锁,系统就不会分配。
  安全状态:有一堆安全序列{P1,P2…Pi}这里面的其中一个线程Pi的可能会使用到的资源数小于当前空闲资源数与被占用资源数和的时候,这个系统就处于安全状态。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值