
java
文章平均质量分 74
1*null
喜欢可爱的女孩子,喜欢学习,喜欢敲代码
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
IDEA创建springBoot项目
1.2.3.4.5.http://localhost:8080/index就会看到qwe,如果使用@Controller注解,return则会去找名字叫qwe的页面,@RestController注解会返回json串,@RestController = @Controller + @ResponseBody(返回json的注解)。...原创 2019-12-19 18:34:33 · 371 阅读 · 0 评论 -
JAVA类加载器
从java虚拟机角度看,只存在两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用C++语言实现,是虚拟机自身的一部分;另外一种就是就是所有其他的类加载器,这些类加载器都有java语言实现,独立于虚拟机外部,并且全部继承自抽象类java.lang.ClassLoader。— 启动类加载器(Bootstrap ClassLoader):这个类加载器负...原创 2018-03-22 17:38:42 · 135 阅读 · 0 评论 -
LinkedList学习
我们还是看源码,来了解LinkedList。添加结点我们先看add(E e)方法 public LinkedList() {//这是没有参数的构造方法,什么都没有执行 }public boolean add(E e) { linkLast(e); //进入这个方法,根据方法名可以猜测是往后添加新添加的元素 return true; }void lin...原创 2018-03-18 20:52:06 · 182 阅读 · 0 评论 -
ArrayList学习(JDK1.8)
对于集合,关注的点主要有四点:1、是否允许空2、是否允许重复数据3、是否有序,有序的意思是读取数据的顺序和存放数据的顺序是否一致4、是否线程安全 ArrayListArrayList是最常见以及每个Java开发者最熟悉的集合类了,顾名思义,ArrayList就是一个以数组形式实现的集合,以一张表格来看一下ArrayList里面有哪些基本的元素:先对于一个集合关注的四个点以表格形式做一个解答:添加元...原创 2018-03-17 22:12:23 · 307 阅读 · 0 评论 -
对volatile关键字的理解
转自:http://www.importnew.com/18126.htmlvolatile关键字我们经常在java并发编程中见到,和volatile经常提到的也有synchronized关键字,这两个关键字都是和java并发有很紧密的关系,我们今天就先说一下volatile关键字。volatile关键字和java内存模型有关,所以我们在了解volatile关键字之前先要了解一下java内...转载 2018-03-02 20:41:03 · 251 阅读 · 0 评论 -
ConcurrentHashMap在JDK8中的实现
转自:https://my.oschina.net/hosee/blog/675884ConcurrentHashMap在JDK8中进行了巨大的改动,它摒弃了Segment(段锁)的概念,而是启用了一种全新的实现方式,利用CAS算法,它沿用了与它同时期的HashMap版本的思想,底层依然由“数组”+链表+红黑树的方式思想(JDK7与JDK8中HashMap的实现),但是为了做到并发,又增加了很多辅...转载 2018-03-06 22:40:34 · 946 阅读 · 0 评论 -
ConcurrentHashMap在JDK 6.7中的实现
转自:https://my.oschina.net/hosee/blog/675884在并发编程实战中,ConcurrentHashMap是一个经常被使用的数据结构,相比HashTable以及Collections.synchronizedMap(),ConcutrrentHashMap在线程安全的基础上提供了更好的写并发能力,但同时降低了对读一致性的要求(这点好像CAP理论)。Concurren...转载 2018-03-06 21:21:37 · 284 阅读 · 0 评论 -
java的快速失败模式和安全失败模式
快速失败: 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加,删除,修改),则会抛出ConcurrentModificationException。原理:迭代器在遍历时直接访问集合中的的内容,并且在遍历过程中使用一个modCount变量。集合在被遍历期间如果内容发生变化,就会改变modCount的值。每当迭代器使用hashNext()/next()遍历下一个元素之前,都...转载 2018-02-11 17:16:53 · 405 阅读 · 0 评论 -
HashMap源码学习-JDK1.8
HashMap是面试的时候基本都会问的,一般还喜欢问它的底层实现,尤其是put(K k,V v)方法,今天我们就看一下它的put方法的底层实现。 public V put(K key, V value) { return putVal(hash(key), key, value, false, true);//看下面方法 }final V putVal(int ...原创 2018-03-19 13:03:16 · 182 阅读 · 0 评论 -
Hashtable源码学习-JDK1.8
我们经常说Hashtable是线程安全的,HashMap是线程不安全的。现在我们就来了解一下Hashtable到底是如何实现线程安全且看一下它的各种重要方法的实现。我们先看一下Hashtable调用无参的构造参数发生了什么。public Hashtable() { this(11, 0.75f);//调用这个构造方法}public Hashtable(int initialCapacit...原创 2018-03-19 18:44:28 · 204 阅读 · 0 评论 -
序列化和反序列化
Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有对象中的数据类型可以用来在内存中新建对象。概念序列化:把对象转换为字节序列的过程称为对象的序列化;反序列化:把字节序...原创 2018-08-19 13:09:28 · 223 阅读 · 0 评论 -
AQS
AbstractQueuedSynchronizer(AQS),类如其名,抽象的队列式同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步器实现都依赖于它,如ReentrantLock、CountDownLatch等。它维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时进入此队列)。state的访问方式有三种:get...转载 2018-08-15 20:04:14 · 563 阅读 · 0 评论 -
Lock锁
我们在介绍Lock锁之前先介绍锁的几个概念。1. 可重入锁如synchronized和ReentrantLock都是可重入锁,可重入性实际上表明了锁的分配机制:基于线程的分配,而不是基于方法调用的分配。当一个线程执行到某个synchronized方法时,如method1方法,而在method1中会调用另一个synchronized方法method2,此时线程不必重新去申请锁,而是可以直接执行met...原创 2018-06-01 17:13:57 · 1259 阅读 · 0 评论 -
ThreadLocal的理解
ThreadLocal(线程本地变量)ThreadLocal不是用来解决共享对象访问的,而主要是提供了保持对象的方法和避免参数传递的方便的对象访问方式。在每个线程内部都有对目标资源的“副本”。每个线程对自己内部的资源进行修改,不影响别的线程中该资源的状态。1. 每个线程中都有一个自己的ThreadLocalMap类对象,可以将线程自己的对象保存到其中,各管各的,线程可以正确访问到自己的对象。2. ...原创 2018-05-31 22:09:48 · 418 阅读 · 0 评论 -
java中接口和抽象类
接口接口是一系列方法的声明,一系列具有某种特征的方法的集合,一个接口只有方法声明而没有具体实现。在类的继承中可以实现一个类实现多个接口。public interface 接口类名称{}抽象类抽象类是描述许多类的公共的地方,它是一个基类,有抽象方法的类一定是抽象类,但抽象类不一定有抽象方法。public abstract 抽象类名称{}抽象类和接口的区别接口可以看做是抽象类的一种更抽象化,接口是对动...转载 2018-04-13 10:39:39 · 132 阅读 · 0 评论 -
java反射
一、反射的概述java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。二、获取class对象要使用反射,我们首先获取这个类的class对象,获取class对象有三种方法:1.类名.class;Class stringClass = String.c...原创 2018-04-14 16:53:48 · 160 阅读 · 0 评论 -
JVM类加载机制
虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。在java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,为java应用程序提供了高度的灵活性。java里面天生可以动态扩展的语言特性运行动态加载和动态连接这个特点实现的。类加载的时机类从被加载到虚拟机内存中开始,到卸...原创 2018-03-21 21:35:42 · 203 阅读 · 0 评论 -
ConcurrentHashMapJDK1.8源码解析
我们先看一下它无参构造函数public ConcurrentHashMap() { }可以看到并未对hash表进行初始化。我们再看一下它的put方法 public V put(K key, V value) { return putVal(key, value, false); }进入putVal方法。 final V putVal(K key, V value, ...原创 2018-04-07 22:56:06 · 280 阅读 · 0 评论 -
匿名内部类实现线程的创建
public class Main { public static void main(String[] args) { for(int i=0;i<4;i++){ new Thread(new Runnable(){ @Override public void run(){ for(int j=0;j<100;j++){ Ticket.fun()原创 2018-02-05 18:24:47 · 323 阅读 · 0 评论 -
synchronized用法的理解
public class MulThreadTest { public static int a = 0; public void addInt1(){ synchronized(this){ a++; System.out.println(a); } } public static原创 2018-02-03 22:49:36 · 229 阅读 · 0 评论 -
获取一个类的class对象的方法
1.类名.class;Class stringClass = String.class;2.类的对象名.getClass();String s="";Class stringClass1 = s.getClass();3.Class.forName("类的全限定名");Class stringClass2 = Class.forName("java.lang.String");原创 2017-04-24 17:20:12 · 586 阅读 · 0 评论 -
java的浅拷贝与深拷贝
作者:NULL00,Java中的深拷贝(深复制)和浅拷贝(浅复制)深拷贝(深复制)和浅拷贝(浅复制)是两个比较通用的概念,尤其在C++语言中,若不弄懂,则会在delete的时候出问题,但是我们在这幸好用的是Java。虽然java自动管理对象的回收,但对于深拷贝(深复制)和浅拷贝(浅复制),我们还是要给予足够的重视,因为有时这两个概念往往会给我们带来不小的困惑。浅拷贝是指拷贝对象转载 2017-04-24 11:21:01 · 235 阅读 · 0 评论 -
java 的public,protected,private,default的区别
private:只有本类可见default(默认的):包中的类可见protected:包中的类。以及包中(或包外)的子类可见。public:所有类可见可见的意思是:该类中的变量或方法可以直接使用此修饰符修饰的属性。public class Policmen { public static void main(String[] args) { Person p = new原创 2017-04-22 15:42:20 · 697 阅读 · 0 评论 -
java中重载方法与覆盖方法调用规则
问题:代码如下: class A { public String show(D obj){ return ("A and D"); } public String show(A obj){ return ("A and A"); } } class B extends A{转载 2017-04-22 12:28:16 · 737 阅读 · 1 评论 -
java泛型?解惑
转自:http://blog.youkuaiyun.com/baple/article/details/25056169T 有类型? 未知类型一、通配符的上界既然知道List并不是List的子类型,那就需要去寻找替他解决的办法, 是AnimalTrianer.act()方法变得更为通用(既可以接受List类型,也可以接受List等参数)。在Java里解决办法转载 2017-05-03 20:47:05 · 210 阅读 · 0 评论 -
java中finally的执行顺序
针对finally的执行问题,这里做了比较详细的解释。原创 2017-04-19 21:14:54 · 899 阅读 · 0 评论 -
Thread.sleep()的理解
我们知道Thread.sleep(Long arg)方法会使当前线程休眠(暂停执行),但是当线程休眠结束一定会执行这个线程吗?答案:不一定这里有两种情况:1.该线程结束休眠时cpu正在被别的线程使用,无法立即使用,当这个线程使用完自己的时间片时,那么刚才 被休眠的线程会立即被执行吗?也是不一定,这个休眠的线程‘复活’过来和其他的线程一样,也要进行抢夺cpu,抢到了就执行,没有抢到就继续等原创 2018-02-04 17:45:29 · 729 阅读 · 0 评论 -
synchronized的使用
(由于线程之间抢夺cpu的不确定性,导致输出结果顺序的不确定性,我的实验结果都是在多次输出的情况下选取的)在一个方法上加上synchronized,意为线程在访问这个方法之前必须判断此时有没有线程正在执行此方法,若有线程正在执行此方法(即为方法的锁被占有),则要访问的线程必须等待正在执行的线程释放锁后,要访问的线程获得锁,才可以进入此方法中执行,若没有线程正在执行,则要访问的线程先获得锁,在进原创 2018-02-03 18:01:05 · 168 阅读 · 0 评论 -
Thread的yield()理解
Thread中的yield()方法的官方解释为:暂停当前正在执行的线程对象,并执行其他线程。其中将正在执行的线程状态由运行状态转换成可运行状态。这里暂停正在执行的线程对象好理解,执行其他线程,那么这里的其他线程包不包括刚才被暂停的线程呢?public class Student1 extends Thread { @Override public void run(){ for(原创 2018-02-03 14:16:45 · 673 阅读 · 0 评论 -
Thread的join()方法理解
Thread的join()方法的官方文档给出的解释是:等待该线程终止。我们可以参考一下代码public class Student1 extends Thread { @Override public void run(){ for(int i=1;i<10;i++){ System.out.println(getName()+"-->"+i); } }}pu原创 2018-02-02 21:36:25 · 1050 阅读 · 0 评论 -
main方法中调用run()和start()的区别
我们知道java中创建线程其中的一种方法是继承Thread类,然后重写run()方法,再在主方法中调用start()执行线程 。那么我们在main中直接调用run()方法和调用start()方法的区别是什么?我们可以观察下面的代码public class Student1 extends Thread { @Override public void run(){ Syste原创 2018-02-01 17:18:51 · 3185 阅读 · 0 评论 -
java动态代理
静态代理的代理对象的字节码在运行时就已经确定了,如果想要代理更多的类就需要编写大量的代码。而jdk动态代理可以在运行时动态生成字节码(因为反射),没有必要为每个代理类编写代码。但因为动态代理需要被代理的类必须实现接口(即动态代理是面向接口代理),当被代理类没有实现接口就无法使用动态代理了。此时就出现了Cglib动态代理,cglib通过继承被代理的类,动态生成字节码并运行,因为是继承所以final类...原创 2017-12-04 18:53:18 · 150 阅读 · 0 评论