
多线程
文章平均质量分 86
爱上香锅的麻辣
高级Java开发工程师,熟悉电商系统整体架构(尤其是订单和商品系统)和服务治理体系
展开
-
Java多线程机制详解
一.创建线程的两种方式继承Thread 实现Runnable接口二.线程的5种状态 1.新生状态(创建状态)。在生成线程对象,但是没有调用对象的start()方法时,该线程处于创建状态 2.就绪状态。当调用了线程对象的start方法之后,该线程就进入了就绪状态,此时线程具有CPU的执行资格,但是没有CPU的执行权。 3.运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,开始运行run原创 2015-10-16 22:26:25 · 496 阅读 · 0 评论 -
Java并发之Lock的实现原理
一.Lock与synchronized对比分析 锁 实现方式 优点 缺点 synchronized monitor锁 隐式获取和释放锁,比较便捷 扩展性没有Lock好 Lock 队列器同步AQS 非阻塞地获取锁;能被中断地获取锁;超时获取锁 显示获取和释放锁比较复杂二.Lock的使用//创建一个可重入锁Loc...原创 2015-10-22 19:48:56 · 684 阅读 · 0 评论 -
Java并发之synchronized的实现原理
一、synchronized的实现原理1.Java对象头与Monitor 在JVM中,对象在内存中的布局分为三块区域:对象头、实例数据和对齐填充。 实例数据:存放类的属性数据信息,包括父类的属性信息,如果是数组,实例部分还包括数组的长度,这部分内存按4字节对齐。填充数据:由于虚拟机要求对象起始地址必须是8字节的整数倍。填充数据不是必须存在的,仅仅是为了字节对齐,这点了解即可...原创 2017-03-16 09:50:33 · 607 阅读 · 1 评论 -
Java实现定时任务的3种方式
一、普通的Thread这是最常见的,创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果。这样可以快速简单的实现,代码如下:package com.ghs.task;public class Task1 { public static void main(String[] args) { final long ...原创 2015-10-25 23:25:18 · 1163 阅读 · 0 评论 -
Java线程池原理解析及3种常用的线程池对比
说到并发编程,最关键的两个模块应该是锁和线程池,下面会详细地讲解Java中线程池的原理和自带的3种线程池。一、ThreadPoolExecutor JDK自带的线程池是ThreadPoolExecutor,对一个线程池而言,有下面几个比较重要的参数:corePoolSize(核心线程数):如果池中的实际线程数小于corePoolSize,无论是否有空闲的线程,都会给新的任务...原创 2015-10-24 00:29:23 · 1047 阅读 · 0 评论 -
Java任务调度线程池ScheduledThreadPoolExecutor原理解析
ScheduledThreadPoolExecutor是JDK在ThreadPoolExecutor的基础上实现的任务调度线程池。 ScheduledThreadPoolExecutor的构造函数全部是调用父类(也就是ThreadPoolExecutor)的构造函数。其中,核心线程数是必须设置的,最大线程数是Integer.MAX_VALUE,空闲工作线程生存时间是0,阻塞队列是Dela...原创 2018-01-16 10:06:31 · 3463 阅读 · 0 评论 -
正确理解 ThreadLocal 的原理与应用场景
一、ThreadLocal解决了什么问题网上有很多关于ThreadLocal解决了什么问题的资料,但是很多都是不正确的。不正确的理解ThreadLocal为解决多线程程序的并发问题提供了一种新的思路ThreadLocal的目的是为了解决多线程访问资源时的共享问题正确的理解看看JDK中的源码是怎么写的: 【原文】This class provides thread-...原创 2016-03-09 11:11:05 · 1062 阅读 · 0 评论 -
ConcurrentHashMap线程安全问题
其实ConcurrentHashMap的put方法跟普通的HashMap没什么区别,如果key相同,依然会覆盖。要想达到不覆盖,我们可以使用putIfAbsent()方法。原创 2017-03-25 15:10:39 · 7957 阅读 · 0 评论 -
Java Web并发访问的线程安全问题
多线程环境下如果访问单例对象,当对象内部有类变量或实例变量时,就可能存在安全性问题。解决方法:1.对操作共享变量的所用方法进行同步控制;2.同步共享变量,例如Collections.synchronizedMap()可以同步共享的Map。3.使用同步对象,例如ConcurrentMap、AtomicInteger等对象都是线程安全的,使用AtomicInteger可以统计系统的并发量。转载 2016-03-08 18:05:39 · 8457 阅读 · 0 评论 -
volatile的适用场景与使用实例
一.volatile的原理二.适用场景必须满足以下两个条件才能保证volatile变量是线程安全的:对变量的写操作不依赖于当前值该变量没有包含在具有其他变量的不变式中三.使用实例...原创 2018-03-06 09:36:37 · 1476 阅读 · 1 评论