![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java多线程
独家技术
这个作者很懒,什么都没留下…
展开
-
Java多线程编程——线程安全和锁Synchronized概念
一、进程与线程的概念 进程: (1)在传统的操作系统中,程序并不能独立运行,作为【资源分配】和【独立运行】的基本单位都是进程。 线程: (2)线程,有时候 被称为【轻量级进程(Lightweight Process,LWP)】,是程序执行流的最小单元。 线程是程序中一个单一的顺序控制流程。 (3)进程和线程的关系 ...转载 2019-02-02 01:31:50 · 148 阅读 · 0 评论 -
什么是Volatile关键字?
一、Java的内存模型(JMM) 在仔细讲解Java的volatile关键字之前有必要先了解一下【Java的内存模型】 Java的内存模型简称JMM(Java Memory Model),是Java虚拟机所定义的一种抽象规范用来屏蔽【不同硬件】和【操作系统】的【内存访问差异】。 让Java程序在各种平台下都能达到一致的内存访问效果。...原创 2019-02-28 19:35:48 · 8784 阅读 · 2 评论 -
Java线程池总结
前言Java中的线程池十分重要,无论是在实际应用中还是应对面试一、线程池原理1.1 使用线程池的好处第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调...转载 2019-02-19 13:00:57 · 118 阅读 · 0 评论 -
Java 并发编程之 Synchronized 关键字最全讲解
synchronized关键字synchronized锁什么?锁对象。锁的对象包括: 1. this 2. 临界区资源对象(任意对象) 3. Class类对象 synchronized 除了保障原子性外,其实也保障了可见性。 因为 synchronized 无论是同步的方法还是同步的代码块,都会先把主内存的数据拷贝到工作内存中,同步代码块结...原创 2019-02-19 11:57:33 · 129 阅读 · 0 评论 -
什么是CAS机制?(高级篇)
一、Java当中CAS的底层实现 CAS的底层究竟是怎么来实现的呢? 比如:AtomicInteger,是怎么做到【原子性】的比较和更新一个值?二、AtomicInteger源码分析1. AtomicInteger当中常用的自增方法 incrementAndGet: public final int incrementAndGet...原创 2019-02-28 15:36:21 · 769 阅读 · 0 评论 -
什么是CAS机制?
一、什么是CAS机制? Synchronized保证了【线程安全】,但是在某些情况下,却不是一个最优选择。关键在于【性能】问题。 1. Synchronized关键字会让没有得到【锁资源】的线程进入Blocked状态,而后在争夺到【锁资源】后恢复为Runnable状态,这个过程中涉及到操作 系统【用...原创 2019-02-27 22:51:18 · 695 阅读 · 0 评论 -
深入分析 ThreadLocal 内存泄漏问题
前言 ThreadLocal的作用就是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。 但是如果滥用ThreadLocal,就可能会导致内存泄漏。 下面,我们将围绕三个方面来分析ThreadLocal 内存泄漏的问题 ThreadLocal 实现原理 ThreadLocal为什么会内存泄...转载 2019-02-18 12:47:22 · 317 阅读 · 1 评论 -
Java多线程编程-(4)-线程本地ThreadLocal的介绍与使用
ThreadLocal简介 变量值的共享可以使用:public static变量的形式,所有的线程都使用同一个被public static修饰的变量。 那么如果想实现每一个线程都有自己的共享变量如何解决? JDK提供了ThreadLocal解决这样的问题。 类ThreadLocal主要解决的就是:每个线程绑定自己的值,可以将ThreadLocal类比成全局存放数据的盒子,...原创 2019-02-22 00:09:43 · 170 阅读 · 0 评论 -
Java多线程编程——从一个错误的双重校验锁代码谈一下volatile关键字
在Java多线程编程中提及到了一段使用Synchronized关键字实现的单利模式--双重校验锁,代码如下:其实上面这段代码是不正确的。双重锁校验需要将对象申明为volatile,不然会因为【指令重排序】导致在第一个判空时将未初始化的对象返回上述的代码是错误的写法,之所以是错误的,这是因为:指令重排优化可能会导致初始化单利对象和将该对象地址赋值给instance字段的顺序与上面...原创 2019-02-21 23:04:58 · 371 阅读 · 0 评论 -
Java多线程同步集合--并发库高级应用
一、阻塞队列 1、在多线程领域,所谓阻塞,在某些情况下会挂起线程,一旦条件满足,被挂起的线程又会自动被唤醒 2、ArrayBlockingQueue(效率高)、LinkedBlockingQueue是两个最常用的阻塞队列,一般情况下用来处理多线程间的生产者消费者问题。二、并发队列 ConcurrentLinkedQueue 传统方式下用Col...原创 2019-02-16 15:08:02 · 354 阅读 · 0 评论 -
Java多线程编程——可重入锁以及Synchronized的其他基本特性
1、Synchronized锁重入 (1)关键字Synchronized拥有【锁重入】的功能: 也就是在使用Synchronized的时候,当一个线程得到一个对象锁后,在该锁里执行代码的时候可以再次请求该对象的锁时可以再次得到该对象的锁。 (2)当线程请求一个由其它线程持有的对象锁时,该线程会阻塞,而当线程请求由自己持有的对象锁时,如果...转载 2019-02-02 02:25:54 · 289 阅读 · 0 评论 -
超详细的Java 生产者消费者模式分析
生产者消费者模式是多线程中最为常见的模式:生产者线程(一个或多个)生成面包放进篮子里(集合或数组),同时,消费者线程(一个或多个)从篮子里(集合或数组)取出面包消耗。虽然它们任务不同,但处理的资源是相同的,这体现的是一种线程间通信方式。本文将先说明单生产者单消费者的情况,之后再说明多生产者多消费者模式的情况。还会分别使用wait()/nofity()/nofityAll()机制、lock()/u...转载 2019-03-09 15:26:06 · 198 阅读 · 0 评论