自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 资源 (1)
  • 收藏
  • 关注

原创 线程sleep,wait,notify,join,yield方法解析

线程的五种状态线程从创建到销毁一般分为五种状态,如下图:1) 新建当用new关键字创建一个线程时,就是新建状态。2) 就绪调用了 start 方法之后,线程就进入了就绪阶段。此时,线程不会立即执行run方法,需要等待获取CPU资源。3) 运行当线程获得CPU时间片后,就会进入运行状态,开始执行run方法。4) 阻塞当遇到以下几种情况,线程会从运行状态进入到阻塞状态。调用sl...

2020-02-29 22:28:26 1488

原创 并发编程之线程池ThreadPoolExecutor

前言在我们平时自己写线程的测试demo时,一般都是用new Thread的方式来创建线程。但是,我们知道创建线程对象,就会在内存中开辟空间,而线程中的任务执行完毕之后,就会销毁。单个线程的话还好,如果线程的并发数量上来之后,就会频繁的创建和销毁对象。这样,势必会消耗大量的系统资源,进而影响执行效率。所以,线程池就应运而生。线程池ThreadPoolExecutor可以通过idea先看下线...

2020-02-27 23:15:13 1071

原创 怎么用IDEA快速查看类图关系

做Java开发的,现在普遍都用上idea了。可以说,idea是当之无愧的Java开发神器。如果,你现在还没用idea,那肯定是你还没有感受过它的强大。好了,话不多说,今天的主题主要是教大家怎么通过idea快速的查看一个类的类图关系,即一个类继承了哪些类,实现了哪些接口,以及接口有哪些子接口和实现类。一、类关系以一个阻塞队列LinkedBlockingQueue为例:1)通过 Ctrl+Sh...

2020-02-26 11:10:43 24579

原创 面试官让我手写一个生产者消费者模式

不知道你是否遇到过面试官让你手写生产者消费者代码。别说,前段时间有小伙伴还真的遇到了这种情况。当时是一脸懵逼。但是,俗话说,从哪里跌倒就要从哪里爬起来。既然这次被问到了,那就回去好好研究一下,争取下一次不再被虐呗。于是,今天我决定手敲一个生产者消费者模式压压惊。(因为我也不想以后被面试官血虐啊)生产者消费者模式,其实很简单。无非就是生产者不停的生产数据,消费者不停的消费数据。(这不废话吗,字...

2020-02-25 22:58:25 1722

原创 怎么用wait、notify巧妙的设计一个Future模式?

我们知道多线程可以实现同时执行多个任务(只是看起来是同时,其实是CPU的时间片切换特别快我们没感觉而已)。现在假设一个做饭的场景,你没有厨具也没有食材。你可以去网上买一个厨具,但是这段时间,你不需要闲着啊,可以同时去超市买食材。设想这是两个线程,主线程去买食材,然后开启一个子线程去买厨具。但是,子线程是需要返回一个厨具的。 如果用普通的线程,只有一个Run方法,而Run方法是没有返回值的,这个...

2020-02-23 21:15:18 1435

转载 HashMap 与HashTable的区别(终结版)

HashMap 与HashTable的区别HashMap与Hashtable的区别是面试中经常遇到的一个问题。这个问题看似简单,但如...

2020-02-22 12:02:54 292

原创 并发编程之Master-Worker模式

我们知道,单个线程计算是串行的,只有等上一个任务结束之后,才能执行下一个任务,所以执行效率是比较低的。那么,如果用多线程执行任务,就可以在单位时间内执行更多的任务,而Master-Worker就是多线程并行计算的一种实现方式。它的思想是,启动两个进程协同工作:Master和Worker进程。Master负责任务的接收和分配,Worker负责具体的子任务执行。每个Worker执行完任务之后把结...

2020-02-21 14:04:51 1135

原创 Java三大变量类变量、实例变量和局部变量

最近看到有的地方说: 成员变量包括实例变量和类变量。而有的地方说成员变量就是实例变量,不是包含关系。我又求证了一些群友和查资料,最终还是认为成员变量就是实例变量这种说法比较靠谱。因为类变量是在类加载的时候就存在了,是存在方法区的。随着类卸载才消失。而实例变量,就是随着对象的创建而创建,对象销毁也就销毁。实例变量别名叫做成员变量。(我理解就是对象中的一个成员,所以形象地称为成员变量)参考:h...

2020-02-19 10:19:51 490

原创 你和那些优秀的人差距在哪里?

前言也许,有的人看到上边这个标题,首先会觉得这肯定是一篇广告文吧。确实,我们可能见过有很多号主用类似于“你的同龄人已经XXX了,而你还在XXX”这种风格,来写软文。但是,我可以明确的告诉你,这篇文章不是广告,只是记录我的一些感想而已。再说了,也没有广告主来找我合作呀(手动捂脸)。正文今天,无意间在CSDN首页看到一个熟悉的id。之前在公众号还有其他地方对这个id有点印象,但是没有关注过,也...

2020-02-17 20:21:07 2487

转载 csdn积分获取攻略

 下载积分攻略:1. 个人设置里进行手机绑定CSDN账户 奖励50分 (右上角设置-账户安全-手机绑定)2. 完成任务送若干分积分      http://task.csdn.net/3. ...

2020-02-17 10:35:33 608 6

原创 JVM垃圾回收详解

通常,我们在写java程序的时候,似乎很少关注内存分配和垃圾回收的问题。因为,这部分工作,JVM已经帮我们自动实现了。这样看起来,好像很美好,但是任何事情都有两面性。虽然JVM会自动的进行垃圾回收,但是,如果遇到有些问题,JVM自己也处理不了呢?因此,我们需要了解一下JVM垃圾回收是怎样运作的,这样才能在遇到问题的时候,有的放矢。所以,今天就来聊一聊JVM的垃圾回收吧。首先,思考一下,为什么...

2020-02-16 21:53:11 1768

原创 Java类加载器和双亲委派机制

前言之前详细介绍了Java类的整个加载过程(类加载机制详解)。虽然,篇幅较长,但是也不要被内容吓到了,其实每个阶段都可以用一句话来概括。1)加载:查找并加载类的二进制字节流数据。2)验证:保证被加载的类的正确性。3)准备:为类的静态变量分配内存,并设置默认初始值。4)解析:把类中的符号引用转换为直接引用。5)初始化:为类的静态变量赋予正确的初始值。当然,要想掌握类加载机制,还是需要去...

2020-02-12 17:18:21 1086

原创 类加载机制详解

之前在介绍JVM内存模型的时候(参看:JVM内存模型),提到了在运行时数据区之前,有个Class Loader,这个就是类加载器。用以把Class文件中的描述信息加载到内存中运行和使用。以下是《深入理解Java虚拟机第二版》对类加载器机制的定义原文:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加...

2020-02-11 20:07:41 3534

原创 字符串常量池理解

在JVM中,为了减少字符串对象的重复创建,维护了一块特殊的内存空间,这块内存就被称为字符串常量池。在JDK1.6及之前,字符串常量池存放在方法区中。到JDK1.7之后,就从方法区中移除了,而存放在堆中。以下是《深入理解Java虚拟机》第二版原文:对于HotSpot虚拟机,根据官方发布的路线图信息,现在也有放弃永久代并逐步改为采用Native Memory来实现方法区的规划了,在目前已经发布的...

2020-02-08 23:23:42 491 5

原创 JVM内存模型

如果想了解JVM内存模型,首先我们要知道JVM是什么?JVM全称 Java Virtual Machine ,即Java虚拟机,是用于运行Java程序编译后的字节码文件。JVM最常见的三种有:1.Sun公司的 HotSpot,是目前使用最广泛的Java虚拟机。2.BEA公司的 JRockit,后来被 Oracle收购。3.IBM公司的 J9VM。我们知道,Java的口号是: “Write on...

2020-02-07 21:38:15 1251

原创 Java设计模式之单例模式

单例模式,是特别常见的一种设计模式,因此我们有必要对它的概念和几种常见的写法非常了解,而且这也是面试中常问的知识点。所谓单例模式,就是所有的请求都用一个对象来处理,如我们常用的Spring默认就是单例的,而多例模式是每一次请求都创建一个新的对象来处理,如structs2中的action。使用单例模式,可以确保一个类只有一个实例,并且易于外部访问,还可以节省系统资源。如果在系统中,希望某个类的对...

2020-02-05 19:37:18 1306

ts+socket.io.zip

cocoscreator下使用ts版本的socket.io,后端socket.io包版本是 ^2.2.0 需要使用1.4.4版本的socket.io.js,配合1.4.5版本的.d.ts声明文件实现智能提示, 使用方法: 在脚本开头引入js: import { connect } from "./socket.io"; if (!cc.sys.isNative) {this.socket = connect(url, options?);} else{ this.socket = io.connect(url, options?);}

2019-10-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除