Java多线程编程一:多线程基础概念

2022-03-07  本文已影响0人  大聪明的博客

一.基础概念
1.同步(Synchronous)/异步(Asynchronous)
同步或者异步通常是针对方法调用说的,同步方法调用需要等待方法结果返回,方法才能结束调用。异步方法调用直接返回,方法执行往往在另一个线程。
2.并发和并行
并发侧重多个任务交替执行,并行则是真正的同时执行,一般只有多核才会出现并发运行,单核CPU只是多个任务的交替执行。
3.阻塞和非阻塞
阻塞是指:A线程的执行会影响B线程,当B线程试图访问A线程正在使用的资源时必须等待,就会造成B线程阻塞,这种资源就叫临界区资源,这种情况就叫阻塞。
非阻塞:相反的来说,多个线程的运行相互之间不会相互影响,就是非阻塞的。
4.死锁/饥饿/活锁
死锁:多个任务运行时,各自占用着对方需要的临界区资源,导致每个任务都无法运行的情况。例如银行家吃饭问题。
饥饿:多个任务运行时,高优先级任务不管抢占低优先级任务资源,造成低优先级任务无法正常执行,但是低优先级任务在未来也有机会正常执行,这种情况就叫饥饿。
活锁:相对死锁而言,活锁不是相互竞争资源造成的任务无法正常执行,是线程间相互谦让造成的。
5.原子性
在多线程任务中,一个操作一旦开始了就不会被中断。
6.可见性
在多线程任务中,一个线程改变了一个变量的值,其他线程可以看见修改过后的值。(缓存优化,硬件优化,编辑器优化都会造成可见性问题)
7.有序性
有序性问题可能是程序在未执行时,发生指令重排,结果指令执行顺序和代码顺序不一致。

上一篇下一篇

猜你喜欢

热点阅读