摘要: 本文来自方腾飞老师《Java并发编程的艺术》第一章。 并发编程的目的是为了让程序运行得更快,但是并不是启动更多的线程就能让程序最大限度地并发执行。在进行并发编程时,如果希望通过多线程执行任务让程序运行得更快,会面临非常多的挑战,比如上下文切换的问题、死锁的问题,以及受限于硬件和软件的资源限制问题,本 阅读全文
posted @ 2018-11-28 18:18 w柠檬草的味道w 阅读(273) 评论(0) 推荐(0)
摘要: 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及。本系列文章将分析JAVA中常见的锁以及其特性,为大家答疑解惑。 1、自旋锁 2、自旋 阅读全文
posted @ 2018-11-27 17:54 w柠檬草的味道w 阅读(82) 评论(0) 推荐(0)
摘要: 基于jdk7和jdk8分析 JVM的内存区域 目录前言1、什么是JVM2、JRE/JDK/JVM是什么关系3、JVM执行程序的过程4、 JVM的生命周期5、JVM垃圾回收一.运行时数据区的组成1.程序计数器2.Java栈(虚拟机栈)1)、局部变量表2)、操作数栈3)、指向运行时常量池的引用4)、方法 阅读全文
posted @ 2018-11-27 16:13 w柠檬草的味道w 阅读(893) 评论(0) 推荐(0)
摘要: 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆、栈以及静态数据区。那么在Java语言当中,内存又是如何划分的呢? 由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分。在讨论JVM内存区域划分之前 阅读全文
posted @ 2018-11-22 18:43 w柠檬草的味道w 阅读(123) 评论(0) 推荐(0)
摘要: 一个线程从new到dead,经历了五种状态: 创建(new)状态: 准备好了一个多线程的对象 就绪(runnable)状态: 调用了start()方法, 等待CPU进行调度 运行(running)状态: 执行run()方法 阻塞(blocked)状态: 暂时停止执行, 可能将资源交给其它线程使用 终 阅读全文
posted @ 2018-11-22 11:28 w柠檬草的味道w 阅读(138) 评论(0) 推荐(0)