1. 下面是一到Java笔试题: public class Test2 { public void add(Byte b) { b = b++; } public void test() { Byte a = 127; Byte b = 127; add(++a); System.out.print(a + " "); add(b); System.out.print(b + ""); } } 2. 为方便分析起见,将打印的语句去掉,如下: public void…
1.synchronized介绍 synchronized是java关键字.JVM规范中,synchronized关键字用于在线程并发执行时,保证同一时刻,只有一个线程可以执行某个代码块或方法:同时还保证了代码在执行完后所修改的数据对其它线程是可见的.总结来说:synchronized解决了并发编程安全问题的原子性,可见性,顺序行.Java中每一个对象都可以作为锁(monitor),这是synchronized实现同步的基础.synchronized作用于每一个对象时,要求占有当前对象的锁要么没…
前言 使用无界队列的线程池会导致内存飙升吗?面试官经常会问这个问题,本文将基于源码,去分析newFixedThreadPool线程池导致的内存飙升问题,希望能加深大家的理解. (想自学习编程的小伙伴请搜索圈T社区,更多行业相关资讯更有行业相关免费视频教程.完全免费哦!) 内存飙升问题复现 实例代码 ExecutorService executor = Executors.newFixedThreadPool(10); for (int i = 0; i < Integer.MAX_VALUE;…
本文转载自字节码增强技术-Byte Buddy 为什么需要在运行时生成代码? Java 是一个强类型语言系统,要求变量和对象都有一个确定的类型,不兼容类型赋值都会造成转换异常,通常情况下这种错误都会被编译器检查出来,如此严格的类型在大多数情况下是比较令人满意的,这对构建具有非常强可读性和稳定性的应用有很大的帮助,这也是 Java 能在企业编程中的普及的一个原因之一.然而,因为起强类型的检查,限制了其他领域语言应用范围.比如在编写一个框架是,通常我们并不知道应用程序定义的类型,因为当这个库被编译时…
Java的Byte类主要的作用就是对基本类型byte进行封装,提供了一些处理byte类型的方法,比如byte到String类型的转换方法或String类型到byte类型的转换方法,当然也包含与其他类型之间的转换方法. 主要实现代码如下: public final class Byte extends Number implements Comparable<Byte> { public static final byte MIN_VALUE = -128; public static fina…
在之前已经将如下这样的源文件对应的字节码文件完整的分析完了,如下: 这次再来写一个内容稍丰富一点的类,准备再来从头至尾的来分析一下,对其字节码的理解进一步巩固,如下: 然后用javap -verbose来查看一下反编译信息: xiongweideMacBook-Pro:jvm_lectue xiongwei$ cd out/production/classes/ xiongweideMacBook-Pro:classes xiongwei$ javap -verbose com/jvm/byte…
先看代码: package com.roocon.thread.t3; public class Sequence { private int value; public int getNext(){ return value++; } public static void main(String[] args) { Sequence sequence = new Sequence(); new Thread(new Runnable() { @Override public void run(…
++/-- 是一种特殊的算术运算符,在算术运算符中需要两个操作数来进行运算,而自增自减运算符是一个操作数 前缀自增(++a):先进行自增运算,再进行表达式运算: 后缀自增(a++):先进行表达式运算,再进行自增运算. int x = 5, y=5; int a = 2*++x; int b = 2*y++; System.out.println(a+"=="+b); 输出结果:a = 12, b =10; 前缀++,先自增运算,=> a=2*6 后缀++,先表达式运算,=>…
前提: 首先要铺垫几个前置的知识: Java中的锁如sychronize锁是对象锁,Java对象头中具有标识位,当对象锁升级为重量级锁时,重量级锁的标识位会指向监视器monitor, 而每个Java对象关联唯一的监视器monitor,因为该关系,Java对象可以做synchronize锁的锁对象,也叫做监视器锁或者是对象锁 1.synchronized 关键字修饰方法 Javap反编译后查看字节码指令如下: 同步方法,JVM使用ACC_SYNCHRONIZED标识来实现.即JVM通过在方法访问标…
一.MyBatis 完整示例 这里,我将以一个入门级的示例来演示 MyBatis 是如何工作的. 注:本文后面章节中的原理.源码部分也将基于这个示例来进行讲解.完整示例源码地址 1.1. 数据库准备 在本示例中,需要针对一张用户表进行 CRUD 操作.其数据模型如下: CREATE TABLE IF NOT EXISTS user ( id BIGINT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Id', name VARCHAR(10) NOT…