美文网首页
Java多线程编程一:多线程基础概念

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

作者: 大聪明的博客 | 来源:发表于2022-03-07 14:32 被阅读0次

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

    相关文章

      网友评论

          本文标题:Java多线程编程一:多线程基础概念

          本文链接:https://www.haomeiwen.com/subject/uxtnrrtx.html