Java生产者消费者模型实践二

BlockingQueue的写法最简单。核心思想是,把并发和容量控制封装在缓冲区中。而BlockingQueue的性质天生满足这个要求。 package com.github.xuchengen.concurrent.impl; import com.github.xuchengen.concurrent.AbsConsumer; import com.github.xuchengen.concu
Java生产者消费者模型实践二

Java生产者消费者模型实践一

考查Java的并发编程时,手写“生产者-消费者模型”是一个经典问题。有如下几个考点: 对Java并发模型的理解 对Java并发编程接口的熟练程度 bug free coding style JDK版本:oracle java 1.8.0_102 本文主要归纳了4种写法,阅读后,最好在白板上练习几遍,检查自己是否掌握。这4种写法或者编程接口不同,或者并发粒度不同,但本质是相同的——都是在使用或实现B
Java生产者消费者模型实践一

Java中finally和return优先级

作为一名Java开发者,拥有扎实的Java基础才能立于不败之地,比如面试或者被面试等等情况。在某些情况下Java的语法极具迷惑性也就是所谓的“坑”比如finally和return语句最终返回谁的结果?,那么本篇将总结一下Java中finally和return的优先级。 代码 package com.github.xuchengen.other; /** * 最终返回实例 * 作者:徐承恩 * 邮箱
Java中finally和return优先级

Java窗口编程仿网页分页原理实现

仿照未必是一件坏事,先要学会仿照,接着理解他,吃透他,等你懂了一定原理后,发现以前的东西不怎么够好,需要改进,那么通过你的改进,使你的软件用户体验更好,我想这应该就是微创新吧。 这个例子的源码是CSDN的一位开发者所分享且一直珍藏在我的浏览器收藏夹多年,由于历史原因现在CSDN已经找不到原文。本着开源分享互助的精神我将源码完善再次公布如下: package com.github.xuchengen
Java窗口编程仿网页分页原理实现

Java中八种数据类型所占字节计算

Java中有八种基本数据类型,分别为:byte、short、int、long、float、double、char、boolean。 这八种基本类型都有对应的包装类,分别为:Byte、Short、Integer、Long、Float、Double、Character、Boolean。 面试时时常会闻到这八种基本类型及其包装类,而且各种基本类型所占的字节数即使记不住、能用代码实现也是可以的。所以给出基
Java中八种数据类型所占字节计算

TKMapper通用Mapper生成主键策略的几种方式

通用 Mapper 是一个可以实现任意 MyBatis 通用方法的框架,项目提供了常规的增删改查操作以及Example 相关的单表操作。通用 Mapper 是为了解决 MyBatis 使用中 90% 的基本操作,使用它可以很方便的进行开发,可以节省开发人员大量的时间。 一、Mybatis基于Maven插件快速生成Java模型以及XML <build> <plugins> &
TKMapper通用Mapper生成主键策略的几种方式

Java中Thread类中State枚举类定义与说明

NEW状态表示刚刚创建的线程,这种线程还没开始执行。等到线程的start()方法调用时。才表示线程开始执行。当现场执行时,处于RUNNABLE状态,表示线程所需的一切资源都已经准备好了。如果线程在执行过程中遇到了synchronized同步块,就会进入BLOCKED阻塞状态,这时线程就会暂停执行,直到获得请求的锁。WAITING和TIMED_WAITING都表示等待状态,它们的区别是WAITING
Java中Thread类中State枚举类定义与说明

一句话介绍synchronized

JVM会自动通过monitor来加锁和解锁,保证了同时只有一个线程可以执行指定代码,从而保证了线程的安全,同时具有可重入和不可中断的性质。
一句话介绍synchronized

包装类对象之间值的比较全部采用equals方法比较

对于 Integer var = ? 在-128 至 127 范围内的赋值,Integer 对象是在 IntegerCache.cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行 判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑, 推荐使用 equals 方法进行判断。
包装类对象之间值的比较全部采用equals方法比较

Java多线程的三个核心思想

一把锁只能同时被一个线程所持有,没有拿到锁的线程只能等待。 每个实例都对应有自己的一把锁,不同实例互不影响。注意:当锁对象是*.class以及synchronized修饰的static方法时所有对象都共用同一把锁。 无论方法是正常执行完毕还是抛出异常,都会释放锁。
Java多线程的三个核心思想