
Java多线程编程实战指南-核心篇
Frasensy
背负青天而莫之夭阏者
展开
-
走近java线程
1、进程、线程、任务进程1、是程序的运行实例,例如一个运行的Eclipse就是一个进程。2、是程序向操作系统申请资源(如内存空间、文件句柄)的基本单位线程1、是进程中可独立执行的最小单位2、一个进程可包含多个线程,所有线程共享该进程的资源任务1、线程要完成的计算就被称为任务2、Java线程APIstart方法调用结束不意味着相应线程的运行开始,只是启动...原创 2019-01-12 09:45:54 · 147 阅读 · 0 评论 -
多线程编程的目标与挑战
1、并行和并发并发:一段时间内交替完成多个任务并行:以齐头并进方式完成多个任务并发的极致就是并行2、多线程的实质是将任务的处理方式由串行改为并发3、竞态定义:计算的正确性依赖于相对时间顺序或者线程交错不一定会导致计算结果不正确,只是不排除计算结果时而正确时而错误的可能竞态往往伴随读取脏数据问题局部变量不会导致竞态4、线程安全性线程安全:一个类在单线程环境下运作正...原创 2019-01-12 09:48:32 · 219 阅读 · 0 评论 -
Java线程同步机制
1、Java提供的线程同步机制包括锁、volatile关键字、final关键字、static关键字以及一些相关的API2、锁锁有排他性,一次只能被一个线程持有锁可以保证原子性、可见性、有序性两个条件:1、这些线程在访问同一组数据必须使用同一个锁2、任意线程读写都需要持有相应的锁可重入性ReentrantLock/**A调用B,B也用lock,但是A正持有lock,但是...原创 2019-01-12 09:51:18 · 726 阅读 · 0 评论 -
线程
1、挖掘可并发点2、分而治之1、基于数据的分割实现并发化2、基于任务的分割实现并发化3、合理设置线程数1、多线程程序的提速只要来自多个线程对程序中可并行化部分的耗时均摊2、最终决定多线程程序提速的因素是整个计算中串行部分的耗时比率而不是线程数3、CPU密集型线程,线程数通常设置为N(cpu)+1;I/O密集型线程优先考虑线程数设为1,不够用的情况下将线程数向2*N(cpu)靠近4、...原创 2019-01-12 09:56:32 · 137 阅读 · 0 评论 -
保障线程安全的设计技术
1、Java运行时存储空间1、堆空间(Heap)可以被多个线程共享存储对象,Java虚拟机启动时分配的一段可以动态扩容的内存空间存储类的实例垃圾回收器的工作场所进一步划分:年轻代、年老代2、栈空间(Stack)线程的私有空间线程创建时分配的固定大小的内存空间局部变量的变量值存储在栈空间,基础类型变量和引用类型变量的变量值直接存储在栈帧空间3、非堆空间(Non-Heap...原创 2019-01-12 09:57:47 · 174 阅读 · 0 评论 -
线程的活性故障
1、线程活性故障由资源稀缺性或者程序自身的问题和缺陷导致线程一直处于非Runnable状态,或者线程虽然处于Runnable状态但是其要执行的任务却一直无法进展的故障现象2、死锁1、产生条件(必要非充分)资源互斥资源不可抢夺占用并等待资源循环等待资源2、破坏任一条件即可避免死锁一般从“占用并等待资源”和“循环等待资源”两方面破坏条件粗锁法:使用粗粒度的锁待敌代替多个锁(...原创 2019-01-12 10:00:46 · 437 阅读 · 0 评论