javaSe
文章平均质量分 53
风泊月
赠人玫瑰,手留余香!
展开
-
java格式化输出printf
简单使用printf原创 2023-01-05 16:22:41 · 290 阅读 · 0 评论 -
i=i++; i=++i;从虚拟机角度解答
i=i++public class MTest { public static void main(String[] args) { int m = 100; m = m++; }}//结果是 100 通过javap -c 命令查看字节码指令如下javap -c Mtest.class0: bipush 100 将常量池数据100压栈到 操作数栈2: istore_1 弹出栈顶元素100 放到局部变量表下标为1 的位置3: iload原创 2021-09-26 20:22:49 · 304 阅读 · 0 评论 -
快速迭代机制失败不能保证的原因
当使用foreach或Iterator迭代器遍历集合时,同时调用迭代器自身以外的方法修改了集合的结构,例如调用集合的add和remove方法时,就会报ConcurrentModificationException。但是,迭代器的快速失败行为不能得到保证,一般来说,存在不同步的并发修改时,不可能作出任何坚决的保证。快速失败迭代器尽最大努力抛出 ConcurrentModificationException*。例如:ArrayList<String> list = new ArrayList&l原创 2021-07-20 21:35:53 · 359 阅读 · 0 评论 -
char数组直接输出内容,其他输出hash码的原因
char数组直接输出内容,其他输出hash码的原因public class Test { public static void main(String[] args) { char[] arr = {'你', '好', '啊'}; System.out.println(arr); int[] arr1 = new int[]{1, 2, 3}; System.out.println(arr1);// Double[]原创 2020-08-10 10:40:00 · 1180 阅读 · 0 评论 -
位运算符以及源码补码反码
位运算符位操作是程序设计中对位模式按位或二进制数的一元和二元操作。创建一个表格位运算符意义<<左移>>右移>>>无符号右移 最高位无论正数负数都补0&俩数都为1结果为1|有一个为1结果是1^相同为0不同为1原码、补码、反码原码:是最简单的机器数表示法。用最高位表示符号位,‘1’表示负号,‘0’表示正号。其他位存放该数的二进制的绝对值。反码:正数的反码还是等于原码补码:正数的补码等原创 2020-08-06 17:55:17 · 401 阅读 · 0 评论 -
线程池ThreadPoolExecutor
引子线程的创建和销毁比较消耗资源,所以有一种更加高效快捷的方式管理线程----线程池。 先来看一下线程池的java模型Executor:线程池顶级接口,只有一个方法ExecutorService:真正的线程池接口void execute(Runnable command) :执行任务/命令,没有返回值,一般用来执行Runnable Future submit(Callable...原创 2020-03-23 07:52:38 · 1195 阅读 · 0 评论 -
volatile
学习volatile之前,先补充一下概念:Java 内存模型中的可见性、原子性和有序性。可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。 可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也...原创 2020-03-23 07:43:51 · 327 阅读 · 0 评论 -
BlockingQueue
今天我们来认识一下BlockingQueue,获取学习资料添加qq:1184905186什么是BlockingQueue?BlockingQueue即阻塞队列,从阻塞这个词可以看出,在某些情况下对阻塞队列的访问可能会造成阻塞。被阻塞的情况主要有如下两种:当队列满了的时候进行入队列操作当队列空了的时候进行出队列操作因此,当一个线程试图对一个已经满了的队列进行入队列操作时,它将会被阻塞,除...原创 2020-03-22 18:42:54 · 845 阅读 · 0 评论 -
认识Condition
今天我们来学习一下Condition(身份)Condition是在Java 1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、notify(),使用Condition1的await()、signal()这种方式实现线程间协作更加安全和高效。&n...原创 2020-03-22 16:06:55 · 460 阅读 · 0 评论 -
Lock与Synchronized的比较
一.Lock锁和Synchronized锁的比较synchronized是java中的一个关键字,已经有它控制线程了 为什么还需要lock?如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,而这里获取锁的线程释放锁只会有两种情况: 1)获取锁的线程执行完了该代码块,然后线程释放对锁的占有; 2)...原创 2020-03-22 10:29:03 · 570 阅读 · 0 评论 -
大话Iterator
我们做集合相关的内容时 必不可少的是会遇到 Iterator这个单词 。今天我们来看一下它是什么?一.IteratorIterator专门为遍历集合而生,集合并没有提供专门的遍历的方法Iterator实际上迭代器设计模式的实现Iterator的常用方法boolean hasNext(): 判断是否存在另一个可访问的元素Object n...原创 2020-03-21 19:52:57 · 322 阅读 · 0 评论 -
多线程数据共享之卖票问题
来看一道经典的多线程问题,多个售票窗口卖票:涉及到线程的创建,资源的掠夺,语法新特性等等。ps:使用了jdk8的新特性 不懂请 看jdk8新特性欢迎点赞关注:qq: 1184905186public class ThreadTest03 { public static void main(String[] args) { TicketWindow ticketWind...原创 2020-03-20 20:16:14 · 371 阅读 · 1 评论 -
多线程数据共享带来的问题以及解决方案
小故事老王(操作系统)有一个功能强大的算盘(CPU),现在想把它租出去,赚一点外快小男、小女(线程)来使用这个算盘来进行一些计算,并按照时间给老王支付费用但小男不能一天24小时使用算盘,他经常要小憩一会(sleep),又或是去吃饭上厕所(阻塞 io 操作),有时还需要一根烟,没烟时思路全无(wait)这些情况统称为(阻塞)在这些时候,算盘没利用起来(不能收钱了),老王觉得有点不划算...原创 2020-03-20 18:33:30 · 1716 阅读 · 0 评论 -
查看进程线程的方法
大量的进程运行时,会导致电脑卡顿,最高效的方式是重启电脑。但是 还要重头再启动很多的软件和服务,如何精确定位哪个进程的那一条线程?ps:获取学习资料 添加qq: 1184905186windows任务管理器可以查看进程和线程数,也可以用来杀死进程tasklist 查看进程taskkill 杀死进程举个例子:linuxps -fe 查看所有进程ps -fT -p 查看某个...原创 2020-03-20 10:44:41 · 1248 阅读 · 0 评论 -
Files工具类
File f = new File("");之前很多的操作都需要创建File 对象 完成 相关的io操作 比较麻烦。jdk 1.4后 提供了新的nio 有了一个新的类Files 简化了我们之前的io操作 还是比较方便的。package com.fpy.nio;import java.io.FileNotFoundException;import java.io.Fil...原创 2020-01-02 16:02:05 · 850 阅读 · 1 评论 -
普通io与nio文件复制效率对比(nio分直接缓冲区和非直接缓冲区)
测试文件是一个压缩包测试时间硬件不同 结果不同 但是总的排名应该是: 直接缓冲区> 非直接缓冲区> 普通io普通io测试 代码如下:耗时5144ms long start = System.currentTimeMillis(); FileInputStream fis = null; FileOutputStream fos ...原创 2019-12-28 15:27:07 · 454 阅读 · 0 评论 -
javanio
JDK 1.4后,Java提供了一个全新的IO API,即Java New IO()学习nio 要了解之前的java io再看一下 io流中主要的实现类知识回顾完毕后 聚焦nionio的新特性nio的核心组件1.javaio 和nio的区别...原创 2019-12-28 15:12:51 · 180 阅读 · 0 评论 -
RandomAccessFile完成在指定位置插入数据
RandomAccessFile:随机读取文件流 可以读 写文件任意位置的数据通过构造器创建对象RandomAccessFile accessFile = new RandomAccessFile(fileName, "rw");mode有四种模式了解后看代码import org.junit.jupiter.api.Test;import java.io.*...原创 2019-12-27 21:58:14 · 1595 阅读 · 0 评论 -
java代码输出万年历
基于java基础代码的日历,对于初学者有很大的帮助,可以看看!原创 2016-08-01 13:39:01 · 12927 阅读 · 0 评论 -
final修饰的对象地址不可改变
我们都知道final修饰的对象地址值不能改变,如图但是把一个用final修饰的对象作为参数传递的时候,地址值可以改变吗?会不会报错呢?如图因为形参Other other是addOne()方法的变量,这个other只是用来接收方法调用处传递的实参,换句话说,他就是用来保存传过来的 o 的地址值,而形参的Other并没有使用final修饰,所以不会报错。如果addOne的Oth原创 2018-01-05 19:37:29 · 2629 阅读 · 0 评论 -
java.io.StreamCorruptedException: invalid type code: AC
对象流追加数据问题转载 2017-06-20 22:01:07 · 4188 阅读 · 1 评论 -
死锁的案例
当多线程处理共享数据时,就会涉及到线程安全问题,采用同步代码块或者同步方法,资源交错,操作不当会产生死锁问题!如下是一个死锁的案例,仅供参考class BreadMilk implements Runnable { private String milk = "牛奶";// 保证有一份 private String bread = "面包"; boolean flag;// true,t原创 2017-03-26 20:39:26 · 1020 阅读 · 0 评论 -
类的加载机制
转自:兰亭风雨 http://blog.csdn.net/ns_code/article/details/17881581类加载过程 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示: 其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加转载 2017-04-09 19:52:28 · 766 阅读 · 0 评论 -
Java内存区域划分、内存分配原理(基于jdk1.7 源自 《深入理解java虚拟机》)
运行时数据区域 Java虚拟机在执行Java的过程中会把管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,而有的区域则依赖线程的启动和结束而创建和销毁。 Java虚拟机包括下面几个运行时数据区域: 程序计数器 程序计数器是一块较小的区域,它的作用转载 2017-04-09 17:51:38 · 5097 阅读 · 0 评论 -
Socket编程服务端和客户端互相通信,实现简单的聊天
socket实现聊天功能原创 2017-03-27 20:21:52 · 12702 阅读 · 1 评论 -
百元买百鸡
初学者经典循环算法题/** * 百元买百鸡 * * @author Mr.Gao */public class BaiYuanBaiJi { /* * 百元买百鸡 公鸡5元一只 母鸡3元一只 小鸡1元3只 * * 用一百元买一百只鸡 */ public static void main(String[] args) { firstMethod(); S原创 2017-03-01 08:19:05 · 1344 阅读 · 0 评论 -
TreeSet实现自定义类的有序输出
TreeSet是唯一有序的,如果是基本数据类型,它会按着自然顺序由小到大输出,但是涉及到自定义类型,就会涉及到各个属性比如我们自定义一个类Student,需要实现Comparable接口,实现自定义类型的排序class Student implements Comparable { String name; int sid; double score; public Student(St原创 2016-11-28 16:02:17 · 1883 阅读 · 0 评论 -
6+66+666+6666
简单算法题求6+66+666+6666的值import java.util.Scanner;public class TestLoop { public static void main(String[] args) { // 求:6+66+666+6666的结果 Scanner scan = new Scanner(System.in); int input = 0;//原创 2017-02-27 21:03:19 · 7127 阅读 · 0 评论 -
常用的八种排序算法与Java代码实现
转自:http://www.jianshu.com/p/5e171281a3871.直接插入排序经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。将第一个数和第二个数排序,然后构成一个有序序列将第三个数插入进去,构成一个新的有序序列。对第四个数、第五个数……直到最后一个数,重复第二步。如何写写成代码:转载 2017-02-08 17:08:58 · 1639 阅读 · 0 评论 -
列出最简真分数序列 1/10,3/10,7/10,9/10
java输出最简单真分数序列原创 2017-01-11 13:35:52 · 2494 阅读 · 0 评论 -
Listener 监听器
Listener的定义与作用监听器Listener就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。Listener是Servlet的监听器,可以监听客户端的请求和服务端的操作等。Listener的分类与使用主要有以下三类:1、ServletContext监听Servle转载 2018-01-26 09:18:59 · 170 阅读 · 0 评论 -
递归实现二分查找
使用递归实现二分查找public class Test { public static void main(String[] args) { //数组 int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; //要查找的元素 int key = 1; //第一个元素的下标 int low = 0; //最后一个元素的下标 int原创 2018-01-10 14:27:10 · 9945 阅读 · 0 评论 -
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数)凡报到3的人退出圈子问最后留下1个人的是原来第几号的那位。
package com.shuzu.test;import java.util.Arrays;public class SanGeRen { /** * 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数), * 凡报到3的人退出圈子, 问最后留下1个人的是原来第几号的那位。 */ public static void main(String[] args原创 2016-08-04 10:29:00 · 1059 阅读 · 0 评论 -
选择排序
import java.util.Arrays;public class SortTest { public static void main(String[] args) { /** * * 1.整个数列分成两部分:前面是有序数列,后面是无序数列 * 2.初始状态下,整个数列都是无序的,有序数列是空 ...原创 2019-05-16 14:57:54 · 225 阅读 · 0 评论 -
写一个类ReflectUtil类, 类中写一个静态方法Object methodInvoker(String classMethd) 此方法为无参方法如, 我们传入的实参字符串为:classMeth
package com.fpy.socket;import java.lang.reflect.Method;public class ReflectUtil { public static Object methodInvoker(String classMethd) throws Exception { // 获取最后一个"."出现的下标 int lastDot = ...原创 2018-09-04 16:34:07 · 800 阅读 · 0 评论 -
Socket连续读取两次数据
实现功能:客户端上传一张图片交给服务端后再次上传一句话告诉服务端已经上传完毕;服务端代码:package com.fpy.socket;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.F...原创 2018-08-30 22:07:15 · 6633 阅读 · 0 评论 -
java try(){}catch(){}自动资源释放
探索更简单的关流方式 /** * 关闭流测试 * 通过读写文件进行测试 * @author Mr.Gao */public class ExceptionCloseTest { public static void main(String[] args) { copy(); } /** * 使用缓冲流完成文件的复制 */ private static void ...原创 2018-08-11 10:51:34 · 2471 阅读 · 1 评论 -
线程池小记录
1:Java中的ThreadPoolExecutor类 java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类,因此如果要透彻地了解Java中的线程池,必须先了解这个类。下面我们来看一下ThreadPoolExecutor类的具体实现源码。 在ThreadPoolExecutor类中提供了四个构造方法:public class T...原创 2018-07-02 17:20:35 · 173 阅读 · 0 评论 -
静态代码块的加载2
一个静态代码块内有一个静态变量public class SupClass { static{ System.out.println("我是静态代码块"); } static String VALUE = "风泊月";}测试类,输出public class Test { public static void main(String[] args) { System.out.pri...原创 2018-03-20 22:35:58 · 260 阅读 · 0 评论 -
静态代码块的加载问题1
创建一个父类只含有一个静态代码块以及一个静态属性public class SupClass { static{ System.out.println("SupClass init()"); } static int value = 20;}创建一个该父类的子类public class SubClass extends SupClass { static{ System.out.p...原创 2018-03-20 22:18:53 · 563 阅读 · 0 评论