码农pilot的个人博客

0%

JVM在运行时,会按照程序执行的需要来创建一系列的运行时数据区域。有的区域只会随JVM起停而被创建和销毁,有的区域则会独立分配给各个线程,并随线程的起停而创建和销毁。这些运行时区域,按照功能和性质不同,会分成如下几部分:

阅读全文 »

做技术,不能只知其然而不知其所以然。在知道了工具的原理之后,才能更高效的使用这个工具。在程序的世界里,源码里面没有秘密,看懂了源码,也就看懂了原理。

这次就来阅读一下ArrayList的源码。

阅读全文 »

注解是Java 5引入的一个新特性,它提供了一个用来将信息和元数据与程序元素相关联的能力,其作用如同一个修饰符,本身并不包含任何程序逻辑。

本文将介绍如何创建和使用自定义的注解。

阅读全文 »

生产者与消费者问题(Producer-consumer problem),也叫有限缓冲问题(Bounded-buffer problem),是一个经典的多线程同步问题案例。

该问题中有两个线程共享一个固定大小的缓冲区,一个线程作为生产者,负责向缓冲区中放入数据;另一个线程作为消费者,负责从缓冲区中取出数据。该问题的重点在于,要保证当缓冲区满时,生产者不能继续向其中放入数据,而当缓冲区空时,消费者也不能从缓冲区中取出数据。

那么要保证以上两点,需要在缓冲区空时休眠消费者线程,并当缓冲区有数据之后唤醒消费者线程;以及当缓冲区满时休眠生产者线程,在缓冲区有空闲空间后唤醒生产者线程,或者直接在缓冲区满时放弃未存入缓冲区的数据。

这个问题的难点在于可能会产生死锁。当陷入死锁时,生产者和消费者都会处于休眠状态,并等待对方唤醒自己。

阅读全文 »