一.基础概念
1.同步(Synchronous)/异步(Asynchronous)
同步或者异步通常是针对方法调用说的,同步方法调用需要等待方法结果返回,方法才能结束调用。异步方法调用直接返回,方法执行往往在另一个线程。
2.并发和并行
并发侧重多个任务交替执行,并行则是真正的同时执行,一般只有多核才会出现并发运行,单核CPU只是多个任务的交替执行。
3.阻塞和非阻塞
阻塞是指:A线程的执行会影响B线程,当B线程试图访问A线程正在使用的资源时必须等待,就会造成B线程阻塞,这种资源就叫临界区资源,这种情况就叫阻塞。
非阻塞:相反的来说,多个线程的运行相互之间不会相互影响,就是非阻塞的。
4.死锁/饥饿/活锁
死锁:多个任务运行时,各自占用着对方需要的临界区资源,导致每个任务都无法运行的情况。例如银行家吃饭问题。
饥饿:多个任务运行时,高优先级任务不管抢占低优先级任务资源,造成低优先级任务无法正常执行,但是低优先级任务在未来也有机会正常执行,这种情况就叫饥饿。
活锁:相对死锁而言,活锁不是相互竞争资源造成的任务无法正常执行,是线程间相互谦让造成的。
5.原子性
在多线程任务中,一个操作一旦开始了就不会被中断。
6.可见性
在多线程任务中,一个线程改变了一个变量的值,其他线程可以看见修改过后的值。(缓存优化,硬件优化,编辑器优化都会造成可见性问题)
7.有序性
有序性问题可能是程序在未执行时,发生指令重排,结果指令执行顺序和代码顺序不一致。
Java多线程编程一:多线程基础概念
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...