随笔分类 - java
摘要:整体结构 程序计数器 它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。 在JVM规范中,每个线程都有自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。 任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序计数器会存储当前线程正在执行的Java方法的J
阅读全文
摘要:通常我们使用线程池均是使用的JDK中自带的线程池,主要有以下几种: newFixedThreadPool 固定线程池 newSingleThreadExecutor 单线程池 newCachedThreadPool 无限制线程池 参数介绍 通过查看Executors源码,可以发现其实际上只是创建了一
阅读全文
摘要:happens-before俗解: http://ifeve.com/easy-happens-before/ volatile关键字解析: https://www.cnblogs.com/dolphin0520/p/3920373.html Java线程池ThreadPoolExecutor实现原
阅读全文
摘要:今天遇到了一个关于synchronized的一个问题,关于其持有锁的问题。这个问题以前是有看过相关文章的,但是一直没有记录,今天大概记录一下当前的认知。 对于静态方法,synchronized的使用的锁实际上是以Class对象作为锁,对于非静态方法,持有的锁为方法所在的对象。可能有点难以理解,但是,
阅读全文
摘要:本文背景为学习重构一书中的一些信息的记录。 该篇以一个影片租赁为背景。通过一层层的重构,最终实现相对来说比较完美的代码。 文中经典语句摘要: “如果它没有坏,就不要动它 。” 用来形容我们工作中一些比较古董级的代码,或许写的很烂,但是基本功能是OK的,对于一个团队leader来说,不会主张你去修改他
阅读全文
摘要:模块说明 l 元素 l 属性 l 实体 l PCDATA(parsed character data) PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。 l CDATA(character data) CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来
阅读全文
摘要:Portability Flaw Locale Dependent Comparison 【问题描述】 该问题涉及String的toUpperCase()方法。具体通过例子演示相关现象。 public class TestString { public static void main(String
阅读全文
摘要:问题很简单,由于自己在写代码时,搞了一个无厘头的操作,进而造成了很多无效的异常日志。 大体逻辑如下,原本是5s循环一次线程,结果造成了在异常产生时,等于进入了死循环逻辑。这样就在不断的输出异常日志,影响了问题定位的效率。 解决办法,也很简单,将Thread.sleep(5000)移至异常抛出之后,就
阅读全文
摘要:具体用法没有总结,只是说明一个用法而已,对于以前个人理解出现的偏差 【问题描述】 对于一个计数功能的实现,获取值的方法是否需要加锁? 【以前理解】 我只需要在进行累加的方法上进行加锁即可,这样保证其可以正确计数即可。对于获取值而言,最大的影响是无法获取当前最新的值而已,其他无影响 【案例测试】 直接
阅读全文
摘要:一、 内存分区 java运行时的数据区域分为以下几个部分:程序计数器、方法区、虚拟机栈、本地方法栈、堆五部分。 程序计数器:属于线程私有的内存,是内存中一块较小的区域,记录当前线程所执行字节码的行号。主要为字节码解释器选取下一条需要执行的字节码执行、分支、循环、跳转、异常处理、线程恢复等基础功能。
阅读全文
摘要:今天又把join的用法大概看了一下,其实理解起来,还是比较简单。用个简单的例子说明一下吧。 1、通过下面的例子,可以看到说出结果中首先全部是是Thread-1,之后才会是Thread-2,这是因为在主线程中调用了thread1的join方法,就等于将主线程和thread1的执行方式由并行改为了串行,
阅读全文
摘要:接口interface 在Java中接口的实现形式: 接口中可以定义变量、方法。对于变量,必须是public static final的变量,即使在定义过程中并没有显示指定,也会被默认指定为public static final类型。而方法则只能定义为public abstract,当然同样即使没有
阅读全文
摘要:对于oldTable中存储的为15、7、4、5、8、1,长度为8的一个数组中,存储位置如下 0 1 2 3 4 5 6 7 8 1 4 5 15 7 当扩容到一倍后,对于新的位置的选择通过e.hash & oldCap 确认其在新的数组中的位置, 如: 8:1000 与原来长度8:1000相与后,为
阅读全文
摘要:volatile详解接下来,我们详细讲述一下volatile关键字volatile关键字具有两重语义 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这个新值对其他线程来说是立即可见的。 禁止指令重排序 依然使用上文RunThread案例说明,上文中已经提到了,由于主线程修
阅读全文
摘要:引起线程并发问题,可以简单的总结为以下三条: 原子性问题 可见性问题 有序性问题(重排序问题) 原子性问题 什么是原子性? 原子性,即一个操作或者多个操作,要么全部执行并且执行过程中不会被任何因素打断,要么全部都不执行。 如常见的银行转账、count++操作等,都必须具备原子性才能保证不出现意外。
阅读全文
摘要:this指针逃逸是指在构造函数返回之前,其他线程已经就持有了该对象的应用,产生的结果自然和预期可能会产生差异。常见的this指针逃逸,在并发编程实战一书中,作者指出:在构造函数中注册事件监听,在构造函数中启动新线程。由于注册事件,并没有用过,因此以线程为例说明问题。: 解决办法是,不在线程中启动线程
阅读全文
摘要:根据上边代码的分析,发现其在多并发的情况下,似乎并不会发生之前版本中形成死锁的情况,其可以保持数据位置的不变性。
阅读全文
摘要:实现方式大致分为两种 懒汉模式 饿汉模式 懒汉模式:在第一次使用该对象时,才会初始化实例,以免了资源的浪费,同时,需要考虑的是线程安全问题。 饿汉模式:在类初始化时就需要创建一个实例对象出来,当时并不一定会使用该对象,可能会造成资源的浪费,好处是不用考虑安全问题。 下面看下几种常见的实现方式: 首先
阅读全文
摘要:“共享”意味着变量可以由多个线程同时访问,而“可变”则意味着变量的值再其声明周期内可以发生变化。 如果当多个线程访问同一个可变的状态变量时没有使用合适的同步,那么程序就会出现错误,有三种方式可以修复这个问题: 不在线程之间共享该状态变量(有点扯,既然我要共享一个状态变量,怎么可能不共享,只能说不共享
阅读全文

浙公网安备 33010602011771号