实战Java高并发程序设计

《实战Java高并发程序设计......葛一鸣&郭超》

《第一章:并行》

同步: 一个任务发出,等到结果才算结束
异步: 一个任务发出即可,别人处理好之后再去通知这个任务。
并发: 并发偏重于多个任务交替执行,而多个任务之间有可能还是串行的。
并行: 并行是真正意义上的”同时执行“。
总结: 并发和并行,都可以表示两个或多个任务一起执行,并发偏重于多个任务交替执行,而多个任务之间有可能还是串行的。并行是真正意义上的”同时执行“。
阻塞blocking: 一个线程是阻塞的,那么在其他线程释放资源之前,当前线程无法继续执行。当我们使用synchronized关键字,或者重入锁时,就是阻塞的线程。
无饥饿starvation-free: 如果线程之间是有优先级的,那么线程调度的时候总是会倾向于满足高优先级的线程。即对于同一个资源的分配,是不公平的。对于非公平的锁来说,系统允许高优先级的线程插队,这样有可能导致低优先级线程产生饥饿。如果锁是公平的,满足先来后到,那么不会又饥饿产生。

并行的原因:

1.为了获得更好的性能
2.由于业务模型的需要,确实需要多个执行实体。
原子性: atomicity,原子性是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。
可见性: visibility,可见性指的是当一个线程修改了某一个共享变量的值,其他线程是否能够立即知道这个修改。对于串行,不存在可见性问题。因为当你在任何一个操作步骤中修改了某个变量,那么在后续的步骤中,读取这个变量的值,一定是修改后的新值。

指令重排的原则-happen-before规则:

1.程序顺序原则:一个线程内保证语义的串行性
2.volatile:volatile变量的写,先发生于读,这保证了volatile变量的可见性。
3.锁规则:解锁必须发生在随后的加锁前
4.传递性:A先于B,B先于C,那么A必然先于C
5.线程的start()方法先于它的每一个动作
6.线程的所有操作先于线程的终结(Thread.join())
7.线程的中断(interrupt())先于被中断线程的代码
8.对象的构造函数执行,结束先于finalize()方法。

《第二章:Java并行程序基础》

进程process是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
线程是轻量级进程,是程序执行的最小单位。使用多线程而不是多进程去进行并发程序设计,是因为线程间的切换和调度的成本远小于进程。
new new状态表示刚刚创建的线程,这种线程还没开始执行
start 等到线程的start()方法调用时,才表示线程开始执行。
runnable 当程序执行时,处于runnable状态,表示线程所需的一切资源都已经准备好了。
blocking 如果线程在执行过程中遇到了synchronized同步块,就会进入blocked阻塞状态,这时线程就会暂停执行,直到获得请求的锁。
wait waiting 和 timed_waiting都表示等待状态,区别是waiting会进入一个无时间限制的等待,timed_waiting会进行一个有时限的等待。waiting的线程正是在等待一些特殊的事件,比如,通过wait()方法等待的线程在等待notify()方法,而通过join()方法等待的线程则会等待目标线程的终止。一旦等到了期望的事件,线程就会再次执行,进入runnable状态。
terminated 当线程执行完毕后,则进入terminated状态,表示结束。
注意: 从new状态出发后,线程不能再回到new状态。
终止线程 stop()方法,立即终止线程,但是是一个被标注为废弃的方法。stop()方法会强制将执行到一半的线程终止,可能会引起一些数据不一致的问题。Thread.stop()方法在结束线程时,会直接终止线程,并且会立即释放这个线程所持有的锁。而这些锁是用来维持对象一致性的。
线程中断

线程中断是一个重要的线程写作机制,中断就是让目标线程停止执行的意思,线程中断并不会使线程立即退出,而是给线程发送一个通知,告知目标线程,有人希望你退出。至于目标线程街道通知后如何处理,完全由目标线程自行决定。


Thread.interrupt() 中断线程
Thr

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值