作为Java
开发者,一般不需要专门编写关注一个Java
类是如何被加载执行的,只需要关注好类中具体方法的逻辑实现就行了。
但,想进一步提高自己的Java
水平,就需要对JVM
以及其中的类加载机制有一定的了解了。本文简单介绍了Java
中的类加载机制。
Good Good Study, Day Day Up
作为Java
开发者,一般不需要专门编写关注一个Java
类是如何被加载执行的,只需要关注好类中具体方法的逻辑实现就行了。
但,想进一步提高自己的Java
水平,就需要对JVM
以及其中的类加载机制有一定的了解了。本文简单介绍了Java
中的类加载机制。
Java语言支持多线程,为了解决线程并发的问题,在语言内部引入了同步块synchronized和volatile关键字机制。在java线程并发处理中,关键字volatile比较少用,原因是:一、JDK1.5之前该关键字在不同的操作系统上有不同的表现,所带来是问题就是移植性差,二、是设计困难,而且误用较多。
wait
和notify
方法,有个地方要注意,就是经典的生产者和消费模式,使用wait
和notify
实现,判断条件为什么要用while
而不能使用if
呢?
其实是因为当线程wait
之后,又被唤醒的时候,是从wait
后面开始执行,而不是又从头开始执行的。
所以如果用if
的话,被唤醒之后就不会在判断if
中的条件,而是继续往下执行了,如果list
只是添加了一个数据,而存在两个消费者被唤醒的话,就会出现溢出的问题了,因为不会在判断size
是否==0
就直接执行remove
了。但是如果使用while
的话,从wait
下面继续执行,还会返回执行while
的条件判断,size>0
了才会执行remove
操作,所以这个必须使用while
,而不能使用if
来作为判断。
在多并发的环境下,如果不注意考虑线程安全的问题,很容易使应用程序出现各种意料之外的结果。
为了解决线程安全问题,我们主要有三种方式:加锁、使用synchronized
关键字和使用ThreadLocal
。
平时我使用锁和synchronized
关键字比较多,对ThreadLocal
是一知半解。本文就来重点介绍一下ThreadLocal
的使用及源码实现。
我们都知道,Spring AOP中常用的拦截注解有@Before,@Around,@After。
那么问题来了,你知道他们的执行顺序是怎样的吗?恐怕这个问题还是有很多同学回答不上来,没关系,阅读完本文你就知道啦。
在JAVA
语言中有8种基本类型和一种比较特殊的类型String
。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个JAVA
系统级别提供的缓存。
8种基本类型的常量池都是系统协调的,String
类型的常量池比较特殊。它的主要使用方法有两种:
String
对象会直接存储在常量池中。String
对象,可以使用String
提供的intern
方法。intern
方法会从字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串放入常量池中今天我们主要来学习一下String
中的intern
方法