版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。 https://blog.csdn.net/wireless_com/article/details/44150053

在Java中,“线程”指java.lang.Thread类的一个实例以及线程的执行,主要使用的线程池是ThreadPoolExecutor以及ScheduledThreadPoolExecutor,要使用固定线程上限的线程池。

用synchronized 修饰静态方法时,表示任何两个不同线程的调用互斥;修饰成员函数时,表示同一对象的多线程方法调用互斥;当然了,synchronized 后的参数可以是任意对象。Synchronized保证了synchronized块中变量的可见性,而volatile保证了所修饰变量的可见性。ReentrantLock是java.util.concurrent.locks中的一个类,与synchronized用法类似,但需要显示的解锁,它提供了ReentrantReadWriteLock,主要用于读多写少且读不需要互斥的场景。

Java.util.concurrent.atomic包中以Atomic开头的类提供了一些相关的原子操作,性能提升的原因是内部通过JNI的方式使用了硬件支持的CAS指令。

Object对象上的三个必备方法:wait、notify、notifyall。Nofity唤醒一个等待线程,notifyall会唤醒所有的等待线程。Wait的使用一般嵌在一个循环中,判断相关的数据状态是否达到预期,如果没有则继续等待,主要是为了防止虚假唤醒。

Java.util.concurrent 中CountDownLatch提供的机制是当多个线程都到达了预期状态或者完成预期工作时触发事件,其他线程可以等待这个事件来触发自己后续的工作。CyclicBarrier可以协同多个线程,让多个线程在mybarrier.wait()前等待,直到所有线程都到达了这个屏障时,再一起执行后面的动作。

CountDownLatch 与CyclicBarrier都有用于线程协调的,主要差别有:CountDownLatch在多个线程都执行了latch.countDown后才触发事件,唤醒wait在latch上的线程,而执行countDown的线程在执行完countDown后会继续自己线程的工作;CyclicBarrier是个栅栏,用于同步所有调用wait方法的线程,并且等所有线程都到了wait的方法时,这些线程才一起返回继续各自的工作。另外,CountDownLatch不能循环使用,而CyclicBarrier可以循环使用。

Semaphore用于管理信号量,信号量对象构造时传入信号个数就是控制并发的数量。执行前通过acquire获取信号,执行后通过release归还,如果没有可用的信号,aquire调用就会阻塞。与控制线程数来控制并发数相比,semaphore控制并发数的控制粒度更细。

Exchanger用于在两个线程之间进行数据交换。线程会阻塞在Exchanger的exchange方法,直到另外一个线程也到了同一个Exchanger的exchange方法时,二者进行交换,然后两个线程会继续执行自身相关的代码。

异步调用的实现方式常用的有:future 和回调函数。调用的方法会返回一个future对象,然后接着进行自己的处理,后面通过future.get()来获取真正的返回值。 FutureTask是future的一个具体实现类。ThreadPoolExecutor的submit方法返回的就是一个FutureTask的具体实现。FutureTask帮助实现了具体的任务执行以及与future接口中的get等方法的关联。FutureTask帮助ThreadPoolExecutor实现了对加入线程池任务的future支持,也使我们能够实现支持future的任务调度。

加锁互斥能够方便地实现线程安全,但代价是降低了性能,而并发容器不仅追求线程安全,而且考虑并发,提升容器在并发环境下的性能。比较有代表性的是以CopyOnWrite和Concurrent开头的几个容器。

Java 中的线程管理概念梳理相关推荐

  1. Java中的线程基础篇-线程基本概念

    线程的概念.创建方式.生命周期.优缺点 一.基础知识 1. 进程.线程.协程 1.1 进程 1.2 线程 1.3 协程 2. 串行.并发.并行 2.1 串行 2.2 并发 2.3 并行 二.线程的创建 ...

  2. 万字图文 | 学会Java中的线程池,这一篇也许就够了!

    来源:一枝花算不算浪漫 线程池原理思维导图.png 前言 Java中的线程池已经不是什么神秘的技术了,相信在看的读者在项目中也都有使用过.关于线程池的文章也是数不胜数,我们站在巨人的肩膀上来再次梳理一 ...

  3. java线程和内核线程的,Java中内核线程理论及实例详解

    1.概念 内核线程是直接由操作系统内核控制的,内核通过调度器来完成内核线程的调度并负责将其映射到处理器上执行.内核态下的线程执行速度理论上是最高的,但是用户不会直接操作内核线程,而是通过内核线程的接口 ...

  4. java jvm内存模型_Java(JVM)内存模型– Java中的内存管理

    java jvm内存模型 Understanding JVM Memory Model, Java Memory Management are very important if you want t ...

  5. 形式参数内存在哪java_深入浅出Java中JVM内存管理

    原标题:深入浅出Java中JVM内存管理 Java岗位面试,JVM是对程序员基本功考察,通常会问你对JVM了解吗?可以分几部分回答这个问题,首先JVM内存划分 | JVM垃圾回收的含义 | 有哪些GC ...

  6. Java多线程编程(1)--Java中的线程

    一.程序.进程和线程   程序是一组指令的有序集合,也可以将其通俗地理解为若干行代码.它本身没有任何运行的含义,它只是一个静态的实体,它可能只是一个单纯的文本文件,也有可能是经过编译之后生成的可执行文 ...

  7. 第五章 如何使用java中的线程打印偶数和奇数

    你有两个线程.您需要使用一个线程打印奇数,使用另一个线程打印偶数.您需要以自然顺序打印最多 MAX. 例如: 如果 MAX 为 10,则需要打印: 1 2 3 4 5 6 7 8 9 10 所以 1 ...

  8. 青铜2:本来面目-如何认识Java中的线程

    在前面的<兵分三路:如何创建多线程>文章中,我们已经通过Thread和Runnable直观地了解如何在Java中创建一个线程,相信你已经有了一定的体感.在本篇文章中,我们将基于前面的示例代 ...

  9. Java中的数组基本概念

    Java中的数组基本概念 一.一维数组 1.定义: 是多个相同类型数据按照一档顺序排列的集合,并用一个名字命名,并通过编号的方式对这些数据进行统一管理. 2.数组中有几个常见的概念: (1)数组名 ( ...

  10. Java中的线程基础知识

    Java中的线程基础知识 1.线程概念 线程是程序运行的基本执行单元.当操作系统(不包括单线程的操作系统,如微软早期的DOS)在执行一个程序时,会在系统中建立一个进程,而在这个进程中,必须至少建立一个 ...

最新文章

  1. Python基础知识实例讲解
  2. 解决安装完ubuntu登陆无root账户问题
  3. nginx四层端口转发
  4. 谈谈一些有趣的CSS题目(十)-- 结构性伪类选择器
  5. mysql 5.6.23 源码包安装报错_大环境下MySQL5.6源码安装实战一步步教你 CentOS6.5_64bit下编译安装...
  6. matlab批量生成灰度图像_科学网—matlab彩色图像的批处理转换为灰度、二值和主成分图图像 - 金秀良的博文...
  7. java内存四大区,jvm基础-内存区域
  8. xposed hook 静态函数_浅谈 Xposed 新概念【模块作用域】
  9. Linux中的重定向
  10. Maven经验分享(一)安装部署
  11. 创建美区苹果账户ID
  12. OKR实施细则(转)
  13. 大数据定价方法的国内外研究综述及对比分析
  14. Dubbo入门基础与实例讲解(超详细)
  15. 计算机主机主板单元,计算机组成原理——主板篇
  16. rosbag库的安装
  17. vue循环后不能下滑_Vue 循环后的数据更改无法响应。
  18. pytorch 入门:GPU加速,卷积层,池化层
  19. GitLab介绍与使用
  20. web前端培训开发,你必须知道的CSS盒模型

热门文章

  1. Atitit.500 503 404错误处理最佳实践oak
  2. paip.前端加载时间分析之道优化最佳实践
  3. paip.python错误解决 0x64024e96 指令引用的 0x00000135 内存。该内存不能为 read。
  4. paip.cpu占用高解决方案---ThreadMast 跟Process Lasso的使用
  5. paip.命令行执行js
  6. 债市概览 | 一文梳理:债券发行、登记托管、交易与结算
  7. Julia : Jupyter notebook 中试玩Julia
  8. (转)深度学习是经验主义新高峰,不是理性主义终结
  9. Julia: find 和其它
  10. 重磅预告!企业上云的正确姿势