![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发
dlut_ppp
这个作者很懒,什么都没留下…
展开
-
线程相关
Thread.currentThread():currentThread()是Thread类的静态方法,该方法总是返回当前正在执行的线程对象(表示当前代码段正在被哪个线程调用) getName():该方法是Thread类的实例方法,返回调用该方法的线程名字通过继承Thread类来获得当前对象比较简单,直接使用this就可以了;而通过实现Runnable接口来获得当前对象,则必须使用Thread...原创 2019-11-29 19:31:20 · 108 阅读 · 0 评论 -
Java 四种线程池的使用
1,线程池的作用线程池作用就是限制系统中执行线程的数量。根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果。少了浪费了系统资源,多了造成系统拥挤效率不高。用线程池控制线程数量,其他线程排 队等候。一个任务执行完毕,再从队列的中取最前面的任务开始执行。若队列中没有等待进程,线程池的这一资源处于等待。当一个新任务需要运行时,如果线程池 中有等待的工作线程,就...转载 2019-09-27 00:20:23 · 125 阅读 · 0 评论 -
ThreadPoolExecutor线程池的分析和使用
1. 引言系统启动一个新线程的成本是比较高的,因为它设计与操作系统交互,在这种情形下,使用线程池可以很好地提高性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池。合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。|| java中所有的池化技术都有一个好处,就是通过复用池中的对象,降低系统资源消耗。设想一下...转载 2019-09-26 22:22:50 · 116 阅读 · 0 评论 -
深入理解JVM-内存模型(jmm)和GC
2. Java内存区域Java程序内存的分配是在JVM虚拟机内存分配机制下完成。Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。简要言之,jmm是jvm的一种规范,定义了jvm的内存模型。它屏蔽了各种硬件和操作系统的访问差异,不像c...转载 2019-09-26 19:28:49 · 218 阅读 · 0 评论 -
java中的锁
基础知识之:java线程阻塞的代价java的线程是映射到操作系统原生线程之上的,如果要阻塞或唤醒一个线程就需要操作系统介入,需要在户态与核心态之间切换,这种切换会消耗大量的系统资源,因为用户态与内核态都有各自专用的内存空间,专用的寄存器等,用户态切换至内核态需要传递给许多变量、参数给内核,内核也需要保护好用户态在切换时的一些寄存器值、变量等,以便内核态调用结束后切换回用户态继续工作。如果线...转载 2019-09-26 16:41:08 · 89 阅读 · 0 评论 -
并发编程—CAS(Compare And Swap)
锁(lock)的代价锁是用来做并发最简单的方式,其代价也是最高的,Java在JDK1.5之前都是靠synchronized关键字来加锁。但是加锁机制会有如下几个问题:加锁、释放锁会需要操作系统进行上下文切换和调度延时,在上下文切换的时候,cpu之前缓存的指令和数据都将失效,这个过程将增加系统开销。(操作系统对多线程的锁进行判断就像两姐妹在为一个玩具在争吵,然后操作系统就是能决定他们谁能拿到...转载 2019-09-16 10:49:55 · 91 阅读 · 0 评论 -
java多线程之单例模式和其DCL问题
首先介绍一下单例模式: 单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方...转载 2019-09-25 22:45:14 · 169 阅读 · 0 评论 -
volatile关键字
一、原子性、有序性、可见性1、原子性:原子是世界上的最小单位,具有不可分割性。比如 a=0;(a非long和double类型) 这个操作是不可分割的,那么我们说这个操作时原子操作。再比如:a++; 这个操作实际是a = a + 1;是可分割的,所以他不是一个原子操作。非原子操作都会存在线程安全问题,需要我们使用同步技术(sychronized)来让它变成一个原子操作。一个操作是原子操作,那...转载 2019-09-25 20:39:38 · 85 阅读 · 0 评论 -
java线程安全
什么是线程安全?《Java Concurrency In Practice》作者Brian Goetz对“线程安全”有一个比较恰当的定义:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。首先从内存模型来了解一下什么是多线程的安全...转载 2019-09-25 20:21:20 · 92 阅读 · 0 评论 -
JAVA线程中sleep()和wait()方法
JAVA线程sleep和wait方法区别一sleep 是线程类(Thread)的方法,是个native方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复,调用sleep 不会释放对象锁。由于没有释放对象锁,所以不能调用里面的同步方法。sleep()使当前线程进入停滞状态(阻塞当前线程),让出CUP的使用、目的是不让当前线程独自霸占该进程所获的...转载 2019-09-25 19:42:42 · 330 阅读 · 0 评论 -
并发三大性质总结:原子性,有序性,可见性
1. 三大性质简介在并发编程中分析线程安全的问题时往往需要切入点,那就是两大核心:JMM抽象内存模型以及happens-before规则(在这篇文章中已经经过了),三条性质:原子性,有序性和可见性。关于synchronized和volatile已经讨论过了,就想着将并发编程中这两大神器在原子性,有序性和可见性上做一个比较,当然这也是面试中的高频考点,值得注意。2. 原子性原子性是指一...转载 2019-09-24 20:48:20 · 277 阅读 · 0 评论 -
HashMap、Hashtable、ConcurrentHashMap的原理与区别
HashTable底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurrentHashMap做了相关优化 初始size为11,扩容:newsize = olesize*2+1 计算index的方法:index = (hash & 0x7FFFFFFF) % tab.lengthHa...转载 2019-09-23 15:29:06 · 107 阅读 · 0 评论 -
ReentrantLock和synchronized
一、synchronized和lock的用法区别synchronized:在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象。lock:需要显示指定起始位置和终止位置。一般使用ReentrantLock类做为锁,多个线程中必须要使用一个ReentrantLock类做为对象才能保证锁的生效。且在加锁和解锁处需要通过lock...转载 2019-09-16 17:27:33 · 155 阅读 · 0 评论