Java高并发程序设计笔记1之重要概念
2016-11-08 11:01
155 查看
几个重要的概念
同步(synchronous)和异步(asynchronous)
![](https://img-blog.csdn.net/20161108110931826?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
同步异步相对系统调用来讲的,异步就是单起另一个线程来运行任务,不影响调用的方法继续执行
并发(Concurrency)和并行(Parallelism)
![](https://img-blog.csdn.net/20161108110906242?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
单核CPU只能并发,也就是一会做这个一会做那个,并行可以理解为一起执行
临界区 – 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用。但是每一次,只能有一个线程 使用它,一旦临界区资源被占用,其他线程要想使用这个资源,就必须等待。
![](https://img-blog.csdn.net/20161108111009524?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
阻塞(Blocking)和非阻塞(Non-Blocking) – 阻塞和非阻塞通常用来形容多线程间的相互影响。比如一个线程占用了临界区资源,那么其它所有需要 这个资源的线程就必须在这个临界区中进行等待,等待会导致线程挂起。这种情况就是阻塞。此时,如 果占用资源的线程一直不愿意释放资源,那么其它所有阻塞在这个临界区上的线程都不能工作。 – 非阻塞允许多个线程同时进入临界区
死锁(Deadlock)、饥饿(Starvation)和活锁(Livelock)
![](https://img-blog.csdn.net/20161108110950326?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
并发级别
– 阻塞
(当一个线程进入临界区后,其他线程必须等待 )
– 无障碍
(无障碍是一种最弱的非阻塞调度 – 自由出入临界区 – 无竞争时,有限步内完成操作 – 有竞争时,回滚数据 )
– 无锁
(是无障碍的 – 保证有一个线程可以胜出
while (!atomicVar.compareAndSet(localVar, localVar+1))
{ localVar = atomicVar.get();
} )
– 无等待
( 无锁的 – 要求所有的线程都必须在有限步内完成 – 无饥饿的 )
有关并行的2个重要定律
Amdahl定律(阿姆达尔定律)
![](https://img-blog.csdn.net/20161108111035593?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
Gustafson定律(古斯塔夫森)
同步(synchronous)和异步(asynchronous)
同步异步相对系统调用来讲的,异步就是单起另一个线程来运行任务,不影响调用的方法继续执行
并发(Concurrency)和并行(Parallelism)
单核CPU只能并发,也就是一会做这个一会做那个,并行可以理解为一起执行
临界区 – 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用。但是每一次,只能有一个线程 使用它,一旦临界区资源被占用,其他线程要想使用这个资源,就必须等待。
阻塞(Blocking)和非阻塞(Non-Blocking) – 阻塞和非阻塞通常用来形容多线程间的相互影响。比如一个线程占用了临界区资源,那么其它所有需要 这个资源的线程就必须在这个临界区中进行等待,等待会导致线程挂起。这种情况就是阻塞。此时,如 果占用资源的线程一直不愿意释放资源,那么其它所有阻塞在这个临界区上的线程都不能工作。 – 非阻塞允许多个线程同时进入临界区
死锁(Deadlock)、饥饿(Starvation)和活锁(Livelock)
并发级别
– 阻塞
(当一个线程进入临界区后,其他线程必须等待 )
– 无障碍
(无障碍是一种最弱的非阻塞调度 – 自由出入临界区 – 无竞争时,有限步内完成操作 – 有竞争时,回滚数据 )
– 无锁
(是无障碍的 – 保证有一个线程可以胜出
while (!atomicVar.compareAndSet(localVar, localVar+1))
{ localVar = atomicVar.get();
} )
– 无等待
( 无锁的 – 要求所有的线程都必须在有限步内完成 – 无饥饿的 )
有关并行的2个重要定律
Amdahl定律(阿姆达尔定律)
Gustafson定律(古斯塔夫森)
相关文章推荐
- 实战Java高并发程序设计-02几个重要概念
- Java高并发程序设计笔记5之JDK同步控制
- Java高并发程序设计笔记10之NIO和AIO
- java高并发程序设计学习笔记一前言
- Java高并发程序设计笔记
- java高并发程序设计学习笔记五六JDK并发包
- Java高并发程序设计笔记6之JDK同步控制
- Java高并发程序设计笔记(六)之CopyOnWriteArrayList与BlockingQuene
- java高并发程序设计学习笔记二多线程基础
- Java高并发程序设计笔记(八)之Future设计模式
- Java高并发程序设计笔记--Java的内存模型(JMM)原子性
- Java高并发程序设计笔记8之线程池
- Java高并发程序设计笔记(四)之线程池
- Java高并发程序设计笔记10之锁的优化和注意事项
- java高并发程序设计学习笔记三内存模型线程安全
- Java高并发程序设计笔记2之并行程序基础
- Java高并发程序设计笔记9之并发设计模式
- Java高并发程序设计笔记(二)
- Java高并发程序设计笔记(三)之Volatile与Lock
- java高并发程序设计学习笔记八BIO、NIO和AIO