并发基础
1: 并发的简短历史
-
程序在各自的进程中运行.互相分离,各自独立执行,由操作系统来分配资源.比如:
内存
文件句柄
安全证书
,如果需要相互通信的话,socket
signal handlers
shared memory
semaphores
文件
-
线程安全:
一个类是线程安全的,是指在被多个线程访问时,类可以持续进行正确的行为.,对于线程安全类的实例进行顺序或者并发
的一些列操作都不会导致实例处于无效状态. -
synchronized
(1)锁对象的引用 (2)锁保护的代码块. - 每一个Java对象都可以隐式的扮演一个用于同步的锁的角色,这些内置的锁被称为
内部锁
或监视器锁
,执行线程进入synchronized块之前会自动获得锁,而无论通过正常路径还是从快中抛出异常,线程都在放弃对synchronized块的控制时自动释放锁.获得内部锁的唯一途径:进入这个内部锁保护的同步块或方法
-
Reentrancy:
当一个线程请求其他线程已经占有的锁时,请求线程将被阻塞,然而内部锁
是可重进入
的,因此线程在试图获的它战友锁,请求会成功,重进入意味着请求是基于没线程(per-thread)
,而不是基于per-invocation
的.重进入的实现是通过为每个锁关联一个请求计数器和一个占有它的线程,当计数器为0时,认为锁是未占有的,占有一个线程计数器+1
-
最后更新:2017-09-24 23:32:41