![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 93
思绪缥缈
这个作者很懒,什么都没留下…
展开
-
管程:并发编程的万能钥匙
一、什么是管程不知道你是否曾思考过这个问题:为什么 Java 在 1.5 之前仅仅提供了 synchronized 关键字及 wait()、notify()、notifyAll() 这三个看似从天而降的方法?在刚接触 Java 的时候,我以为它会提供信号量这种编程原语,因为操作系统原理课程告诉我,用信号量能解决所有并发问题,结果我发现不是。后来我找到了原因:Java 采用的是管程技术,synchronized 关键字及 wait()、notify()、notifyAll() 这三个方法都是管程的组成部分转载 2021-08-20 21:29:38 · 209 阅读 · 0 评论 -
Java中的class文件详解
即使对于有经验的Java开发人员来说,阅读已编译的Java字节码也很乏味。为什么我们首先需要了解这种低级别的东西?这是上周发生在我身上的一个简单情况:很久以前,我在机器上进行了一些代码更改,编译了一个JAR,并将其部署到服务器上,以测试性能问题的潜在修补程序。不幸的是,代码从未被检入到版本控制系统中,并且出于某种原因,本地更改被删除而没有追踪。几个月后,我再次需要源代码形式的变化(这需要付出相当大的努力),但是我找不到它们!幸运的是编译后的代码仍然存在于该远程服务器上。于是松了一口气...转载 2020-10-25 23:08:23 · 401 阅读 · 0 评论 -
java线程间通讯的几种方式
文章目录 一、使用同一个共享变量控制 Synchronized、wait、notify Lock、Condition 利用volatile 利用AtomicInteger 二、PipedInputStream、PipedOutputStream 三、利用BlockingQueue 一、使用同一个共享变量控制Synchronized、wait、notifypublic class Demo1 { private final List.转载 2020-09-24 11:42:22 · 130 阅读 · 0 评论 -
TreeMap原理实现及常用方法
目录一. TreeMap概述 二. 红黑树回顾 三. TreeMap构造 四. put方法 五. get 方法 六. remove方法 七. 遍历 八. 总结前面我们分别讲了Map接口的两个实现类HashMap和LinkedHashMap,本章我们讲一下Map接口另一个重要的实现类TreeMap,TreeMap或许不如HashMap那么常用,但存在即合理,它也有自己的应用场景,TreeMap可以实现元素的自动排序。一. TreeMap概述TreeMap存储K-V键值对,通过.转载 2020-09-20 22:39:43 · 602 阅读 · 0 评论 -
Java中节点流和处理流的简单认知
在程序中所有的数据都是以流的方式进行传输或保存的,所以在Java中IO流也是必不可少的。Java中的IO流在java.io包中。在java.io包中不管是操作文件和目录都是使用File类来操作,File能新建、删除、重命名文件和目录,但是File不能访问文件内容本身。而需要操作文件内容在java.io包中主要有两大类:字符流和字节流(1)字符流字符流主要的操作对象是文本,因为文本的占用内存小,如果使用字节流,可能会因为各种字节编码字节位数不同,从而使得读取文本不完整,产生乱码。字符流在操作的时候是使转载 2020-09-20 16:54:28 · 322 阅读 · 0 评论 -
java 本地方法(JNI)
最近搞了一个调用第三方so库做登录认证的任务,以前对JNI没什么概念,最近学习了 《java核心技术》 本地方法 一章,把自己写的一些例子记录一下。 自己C语言真是渣渣,所以所有的例子都在可以包括基本API的基础上尽可能简单。以下所有例子都是在centos 7中测试的,window不太熟。调用本地方法java调用本地方法,首先需要加载包含对应方法的so库(linux),一般使用下面这种方式加载so库。public class Test{ static {转载 2020-07-08 20:42:47 · 1057 阅读 · 0 评论 -
Java的深拷贝和浅拷贝
关于Java的深拷贝和浅拷贝,简单来说就是创建一个和已知对象一模一样的对象。可能日常编码过程中用的不多,但是这是一个面试经常会问的问题,而且了解深拷贝和浅拷贝的原理,对于Java中的所谓值传递或者引用传递将会有更深的理解。1、创建对象的5种方式 ①、通过 new 关键字 这是最常用的一种方式,通过 new 关键字调用类的有参或无参构造方法来创建对象。比如 Object obj = new Object(); ②、通过 Class 类的 newInstance() 方法 这种默认转载 2020-07-07 00:38:18 · 98 阅读 · 0 评论 -
深入理解JAVA I/O系列六:Linux中的IO模型
IO模型 linux系统IO分为内核准备数据和将数据从内核拷贝到用户空间两个阶段。这张图大致描述了数据从外部磁盘向运行中程序的内存中移动的过程。用户空间、内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟储存空间)为4G(2的32次方)。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核,保证内核的安全,操作系统将虚拟空间划分为两个部分,一个部分为内核空间,一部分.转载 2020-07-05 14:46:42 · 206 阅读 · 0 评论 -
Java NIO:IO与NIO的区别
一、概念 NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。二、NIO和IO的主要区别下表总结了Java IO和NIO之间的主要区别:IO NIO 面向流 面向缓冲 阻塞IO 非阻塞IO 无 选择器 1、面向流与面向缓冲...转载 2020-07-04 11:44:24 · 153 阅读 · 0 评论 -
深入理解BIO、NIO、AIO
导读:本文你将获取到:同/异步 + 阻/非阻塞的性能区别;BIO、NIO、AIO 的区别;理解和实现 NIO 操作 Socket 时的多路复用;同时掌握 IO 最底层最核心的操作技巧。BIO、NIO、AIO 的区别是什么?同/异步、阻/非阻塞的区别是什么?文件读写最优雅的实现方式是什么?NIO 如何实现多路复用功能?带着以上这几个问题,让我们一起进入IO的世界吧。在开始之前,我们先来思考一个问题:我们经常所说的“IO”的全称到底是什么?可能很多人看到这个问题和我一样一脸懵逼,IO的全称转载 2020-07-04 11:01:29 · 319 阅读 · 0 评论 -
详解 Java 中 4 种 IO 模型
同步、异步、阻塞、非阻塞都是和I/O(输入输出)有关的概念,最简单的文件读取就是I/O操作。而在文件读取这件事儿上,可以有多种方式。本篇会先介绍一下I/O的基本概念,通过一个生活例子来分别解释下这几种I/O模型,以及Java支持的I/O模型。基本概念在解释I/O模型之前,我先说明一下几个操作系统的概念文件描述符fd文件描述符(file descriptor)是计算机科学中的一个术语,是一个用于表述指向文件的引用的抽象化概念。文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内转载 2020-07-02 13:27:47 · 143 阅读 · 0 评论 -
深入理解Java中的IO
引言: 对程序语言的设计者来说,创建一个好的输入/输出(I/O)系统是一项艰难的任务 < Thinking in Java >本文的目录视图如下:Java IO概要a.Java IO中常用的类 b.Java流类的类结构图1.流的概念和作用2.Java IO所采用的模型 :3.IO流的分类4.Java IO流对象 1.输入字节流InputStream 2.输出字节流OutputStream 3...转载 2020-06-30 18:30:08 · 176 阅读 · 0 评论 -
Java线程和操作系统线程的关系
传统进程的缺点fork一个子进程的消耗是很大的,fork是一个昂贵的系统调用,即使使用现代的写时复制(copy-on-write)技术。 各个进程拥有自己独立的地址空间,进程间的协作需要复杂的IPC技术,如消息传递和共享内存等。多线程的优缺点线程:其实可以先简单理解成cpu的一个执行流,指令序列。多支持多线程的程序(进程)可以取得真正的并行(parallelism),且由于共享进程的代码和全局数据,故线程间的通信是方便的。它的缺点也是由于线程共享进程的地址空间,因此可能会导致竞争,因此对某一块有多转载 2020-06-30 13:55:51 · 2796 阅读 · 0 评论 -
【BAT面试题系列】面试官:你了解乐观锁和悲观锁吗?
前言乐观锁和悲观锁问题,是出现频率比较高的面试题。本文将由浅入深,逐步介绍它们的基本概念、实现方式(含实例)、适用场景,以及可能遇到的面试官追问,希望能够帮助你打动面试官。目录一、基本概念二、实现方式(含实例) 1、CAS(Compare And Swap) 2、版本号机制三、优缺点和适用场景四、面试官追问:乐观锁加锁吗?五、面试官追问:CAS有哪些缺点?六、总结一、基本概念乐观锁和悲观锁是两种思想,用于解决并发场景下的数据竞争问题。乐...转载 2020-06-22 10:35:30 · 131 阅读 · 0 评论 -
JAVA如何解决并发问题
并发问题的根源在哪首先,我们要知道并发要解决的是什么问题?并发要解决的是单进程情况下硬件资源无法充分利用的问题。而造成这一问题的主要原因是CPU-内存-磁盘三者之间速度差异实在太大。如果将CPU的速度比作火箭的速度,那么内存的速度就像火车,而最惨的磁盘,基本上就相当于人双腿走路。这样造成的一个问题,就是CPU快速执行完它的任务的时候,很长时间都会在等待磁盘或是内存的读写。计算机的发展有一部分就是如何重复利用资源,解决硬件资源之间效率的不平衡,而后就有了多进程,多线程的发展。并且演化出了各种为多进转载 2020-06-17 20:30:19 · 2903 阅读 · 1 评论 -
maven下载jar包速度太慢的解决方法
1.在maven的settings.xml中添加镜像配置<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf>转载 2020-06-11 17:01:30 · 709 阅读 · 0 评论 -
Java中的深拷贝和浅拷贝
这篇博客主要来谈谈"Java中的深拷贝和浅拷贝"的相关知识,主要内容包括:1.概述2.复制对象 or 复制引用3.深拷贝 or 浅拷贝--------------------------------------------------------------------1、概述 ...转载 2018-11-06 14:44:25 · 161 阅读 · 0 评论 -
自定义log4j.properties的加载位置
方法一:在main函数中添加如下代码public class App { static final Logger logger = Logger.getLogger(App.class); public static void main( String[] args ) { PropertyConfigurator.configure("/abs...原创 2018-10-31 17:27:46 · 6147 阅读 · 0 评论 -
Log4J日志配置总结
一、Log4j简介Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。1、LoggersLoggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FAT...转载 2018-10-31 15:19:03 · 184 阅读 · 0 评论