Java
文章平均质量分 79
原飞木
Java开发工程师
展开
-
AQS(AbstractQueuedSynchronizer)原理
AQS 的全称为(),AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出大量应用广泛的同步器,比如我们提到的 ,,其他的诸如 ,, 等等皆是基于 AQS 的。当然,我们自己也能利用 AQS 非常轻松容易地构造出符合我们自己需求的同步器。AQS 核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制 AQS 是用 CLH 队列锁实现的,即将暂原创 2022-06-12 15:26:07 · 971 阅读 · 0 评论 -
线程池工作原理
线程池最核心的思想就是把资源放到一个池子中;每次使用都从里面获取,用完之后又放回池子供其他人使用。通过线程复用机制,并对线程进行统一管理,具有以下优点:1.降低系统资源消耗,通过复用已存在的线程,降低线程创建和销毁造成的消耗;2.提高响应速度。当有任务到达时,无需等待新线程的创建便能立即执行;3.提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗大量系统资源,还会降低系统的稳定性,使用线程池可以进行对线程进行统一的分配、调优和监控。总共包含以下 7 种(其中 6 种是通过 Executors原创 2022-06-04 09:58:49 · 1651 阅读 · 0 评论 -
synchronized中的偏向锁、轻量级锁、重量级锁
对于synchronized这个关键字,可能之前大家有听过,他是一个重量级锁,开销很大,建议大家少用点。但到了jdk1.6之后,该关键字被进行了很多的优化,,建议大家多使用。在现在的版本中,锁的状态总共有四种:无锁状态偏向锁轻量级锁重量级锁锁的“重量”从左到右,依次递增锁实际上是加在对象上的,那么被加了锁的对象我们称之为锁对象,在java中,任何一个对象都能成为锁对象。为了让大家更好着理解虚拟机是如何知道这个对象就是一个锁对象的,我们下面简单介绍一下java中一个对象的结构java对象原创 2021-03-11 20:49:33 · 1261 阅读 · 0 评论 -
java8新特性
Lambda表达式Lambda 表达式的基础语法:Java8中引入了一个新的操作符 “->” 该操作符称为箭头操作符或 Lambda 操作符, 箭头操作符将 Lambda 表达式拆分成两部分:左侧:Lambda 表达式的参数列表,参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出,数据类型右侧:Lambda 表达式中所需执行的功能, 即 Lambda 体语法格式一:...原创 2019-09-03 23:26:51 · 976 阅读 · 0 评论 -
Java虚拟机之运行时数据区
Java虚拟机在执行Java程序的过程有把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自不同的作用,如下图《深入理解Java虚拟机》1.程序计数器 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是...原创 2018-12-21 16:58:24 · 1492 阅读 · 0 评论 -
synchronized静态方法与非静态方法
一个对象里面如果有多个synchronized方法,某一个时刻内,只要一个线程去调用其中的一个synchronized方法了,其它的线程都只能等待,换句话说,某一个时刻内,只能有唯一一个线程去访问这些synchronized。我们需要先弄清楚synchronized 在类方法上使用的两个关键点。1.非静态方法的锁默认为 this,也就是我们所说的对象锁, 静态方法的锁为 对应的 ...原创 2018-08-05 14:27:13 · 2856 阅读 · 0 评论 -
Java异常分析工具的使用
工具https://www.eclipse.org/mat/对于经常使用Linux系统的人员来说,少不了将本地的文件上传到服务器或者从服务器上下载文件到本地,rz / sz命令很方便的帮我们实现了这个功能安装yum install -y lrzszsz命令发送文件到本地:sz filenamerz命令本地上传文件到服务器:rz......原创 2019-05-13 08:55:53 · 1393 阅读 · 0 评论 -
Java之volatile关键字
volatile 关键字:当多个线程进行操作共享数据时,可以保证内存中的数据可见。 相较于 synchronized 是一种较为轻量级的同步策略。缺点:1. volatile 不具备“互斥性”2. volatile 不能保证变量的“原子性”内存可见性是指当某个线程正在使用对象状态而另一个线程在同时修改该状态,需要确保当一个线程修改了对象状态后,其他线程能够看到发生的状态变化。...原创 2018-08-02 10:44:35 · 2085 阅读 · 3 评论 -
Java设计模式—责任链模式
责任链定义使多个对象都有处理请求的机会,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象串成一条链,并沿着这条链一直传递该请求,直到有对象处理它为止。白话:例如领导让实习生完成一个需求,实习生完成不了转交给初级工程师,初级工程师完成不了转交个中级工程师…直到有人能够完成,或者都没有人能够完成则终止。1...原创 2019-08-09 00:38:43 · 857 阅读 · 0 评论 -
Java对象的创建过程:类的初始化与实例化
摘要: 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的。在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类构造器完成类的初始化。在类初始化过程中或初始化完毕后,根据具体情况才会去对类进行实例化。本文试图对JVM执行类初始化和实例化的过程做一个详细深入地介绍,以便从Java虚拟机的角度清晰解剖一个Ja...转载 2018-06-10 21:51:39 · 1113 阅读 · 0 评论 -
L2-020. 功夫传人
一门武功能否传承久远并被发扬光大,是要看缘分的。一般来说,师傅传授给徒弟的武功总要打个折扣,于是越往后传,弟子们的功夫就越弱…… 直到某一支的某一代突然出现一个天分特别高的弟子(或者是吃到了灵丹、挖到了特别的秘笈),会将功夫的威力一下子放大N倍 —— 我们称这种弟子为“得道者”。这里我们来考察某一位祖师爷门下的徒子徒孙家谱:假设家谱中的每个人只有1位师傅(除了祖师爷没有师傅);每位师傅可以原创 2017-03-30 21:47:06 · 1116 阅读 · 0 评论 -
波动数列
观察这个数列: 1 3 0 2 -1 1 -2 ... 这个数列中后一项总是比前一项增加2或者减少3。 栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增加a或者减少b的整数数列可能有多少种呢?【数据格式】 输入的第一行包含四个整数 n s a b,含义如前面说述。 输出一行,包含一个整数,表示原创 2017-05-01 16:46:59 · 2891 阅读 · 1 评论 -
有符号右移>>,无符号右移>>>
计算机表示数字正负不是用+ -加减号来表示,而是用最高位数字来表示,0表示正,1表示负1.有符号右移>>(若正数,高位补0,负数,高位补1)正数:例如4>>2首先写出4的二进制数,因为是正数所以最高位为0,也就是第一个0000 0000 0000 0000 0000 0000 0000 0100右移两位得到(高位补0)000000 0000 0000...原创 2018-02-27 23:35:58 · 14374 阅读 · 10 评论 -
implements Runnable与extends Thread 的区别
分别写了两种方式的线程,代码如下public class Threadaaa { public static void main(String args[]) throws Exception { // 多线程共享一个对象 ImplementsRunnable rc = new ImplementsRunnable(); Thread t1 = new Thread(rc);原创 2017-10-13 23:20:51 · 1440 阅读 · 0 评论 -
Java之浮点类型
浮点类型(float和double)是我们非常熟悉的类型,在程序中也会经常使用,如用来表示增长率,物品重量等方面。不过在使用浮点类型时,还是要留意一些问题的。毕竟浮点类型仅是数学中小数的一种模拟,不能将其与数学中的小数运算等同视之。浮点类型只是近似的存储例如0.1+0.2得到的结果并不是0.3:public class Main { public static ...原创 2018-07-11 12:19:12 · 994 阅读 · 0 评论 -
Callable,Lock,Condition,ReadWriteLock
Callable接口Java5.0在java.util.concurrent提供了一个新的创建执行线程的方式:Callable接口Callable接口类似于Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是Runnable不会返回结果,并且无法抛出经过检查的异常。Callable需要依赖FutureTask,FutureTask也可以用作闭锁。imp...原创 2018-11-08 11:55:52 · 919 阅读 · 0 评论 -
Java设计模式—代理模式
代理就是真实对象的代表。代理模式的应用场景:1.远程代理,也就是为一一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。例如当某一个产品在当地做大后,那么就可以去其他地方发展,每个地方可以雇佣一个代理来帮忙打理。2.虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。这样就可以达到性能的最优化,比如说你打开一个很大的H...原创 2018-10-12 13:51:46 · 892 阅读 · 0 评论 -
Java之反射
Java的反射机制,常用的4个类,Class、Field、Constractor、Method。Class是一个比较特殊的类,可以说任何一个类都是Class的实例对象。后面的Field、Constractor、Method三个类都是在java.lang.reflect包下。在Java中万事万物皆对象。1.Class类的使用例如有一个类public class Foo...原创 2018-09-20 13:34:25 · 918 阅读 · 0 评论 -
Java之NIO
Java NIO是从Java 1.4版本开始引入的一个新的IO API,与传统IO 的主要区别IO NIO 面向流(Stream Oriented 面向缓冲区(Buffer Oriente 阻塞IO(Blocking IO 非阻塞IO(Non Blocking I 无 选择器(Selector Java NIO系统的核心在于:通道(Channel)和缓冲...原创 2018-09-15 19:37:33 · 924 阅读 · 0 评论 -
Java之IO流
Java输入/输出流体系中常用的流分类(表内容来自java疯狂讲义)输入流:把数据(文件、键盘输入、其他输入设备)读到你的程序中输出流:程序中的数据输出到外设或文件中注:下表中带下划线的是抽象类,不能创建对象。粗体部分是节点流,其他就是常用的处理流。流分类 使用分类 字节输入流 字节输出流 字符输入流 字符输出流 抽象基类 Inpu...转载 2018-05-27 15:49:57 · 981 阅读 · 0 评论 -
Java基础之线程
1.线程的生命周期2.线程的调度方式通过分时和抢占来完成的同优先级线程组成先进先出队列(先到先服务),使用时间片策略对高优先级,使用优先调度的抢占式策略3.线程的创建方式(1)继承Thread类(2)实现Runnable接口区别:继承Thread: 线程代码存放Thread子类run方法中 实现Runnable:线程代码存在接...原创 2018-05-07 20:57:47 · 1152 阅读 · 0 评论 -
Java设计模式—单例模式
单例模式单例模式有以下特点:1)单例类只能有一个实例。2)单例类必须自己创建自己的唯一实例。3)单例类必须给所有其他对象提供这一实例。4)单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。懒汉式单例模式(线程安全)该模式的特点是类加载时没有生成单例,只有当第一次调用 getlnstance 方法时才去创建这个单例。代码如下:import jav...原创 2018-05-14 20:31:29 · 1103 阅读 · 0 评论 -
Java关键字以及修饰属性
1. java中的修饰属性(public,private,protect,default)public:java中访问限制最宽的修饰符。被其修饰的类,属性以及方法不仅可以跨类访问,而且可以跨包(package)访问private:权限限制最窄的修饰符。被其修饰的类,属性以及方法只能被该类的对象访问,子类不能访问,更不能跨包访问protect:介于public和private之间。被其修...转载 2018-04-03 21:12:08 · 1910 阅读 · 0 评论 -
Java回调机制
以前不理解什么叫回调,天天听人家说加一个回调方法啥的,心里想我草,什么叫回调方法啊?然后自己就在网上找啊找啊找,找了很多也不是很明白,现在知道了,所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法,这样子说你是不是有点晕晕的,其实我刚开始也是这样不理解,看了人家说比较经典的回调方式:Class A实现接口CallBack callback——...转载 2018-03-26 16:12:02 · 852 阅读 · 0 评论 -
JRE和JDK的区别
1. 定义JRE(Java Runtime Enviroment)是Java的运行环境。面向Java程序的使用者,而不是开发者。如果你仅下载并安装了JRE,那么你的系统只能运行Java程序。JRE是运行Java程序所必须环境的集合,包含JVM标准实现及 Java核心类库。它包括Java虚拟机、Java平台核心类和支持文件。它不包含开发工具(编译器、调试器等)。JDK(...转载 2018-03-21 22:26:46 · 529 阅读 · 0 评论 -
MD5加密
MD5加密原理是散列算法,散列算法也称哈希算法。计算机专业学的数据结构就有哈希表这一知识点。比如10除以3余数为一,4除以3余数也为一,但余数为一的就不知道这个数是哪个了。所以md5不能解密。就算是设计这个加密算法的人都不知道。但是你的密码是怎么验证的呢?就是因为同一密码加密后一定相同。你输入密码加密后才能知道你的密码是否正确。也就是说,你的密码只有你自己知道。也是为什么扣扣密码...原创 2018-03-29 23:27:39 · 1117 阅读 · 0 评论 -
关于重装系统后Intel(R) Ethernet Connection I217-V的驱动安装失败问题
1.首先下载PROWinx64.exe,下载地址如下http://download.csdn.net/download/bushqiang/102198662.是解压不是直接安装!!!!右击解压PROWinx64文件,依次进入PRO1000—>Winx64—>NDIS64文件夹,找到名称为e1d64x64的文件,使用记事本打开此文件,找到I217-V这一行,复制一下对...原创 2018-01-23 15:27:22 · 25131 阅读 · 1 评论 -
Java常用集合的总结,集合中的(交集,并集,差集,补集,对称差集)
集合中的(交集,并集,差集,补集,对称差集)老是会弄混了常用的集合类有一下几种:List结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类Map结构的集合类:HashMap类,Hashtable类Set结构的集合类:HashSet类,TreeSet类Queue结构的集合:Queue接口如果要求线程安全,使用Vector,Ha...原创 2017-11-16 22:41:06 · 2348 阅读 · 0 评论 -
创建tomcat的服务,删除服务,通过服务来启动项目
首先服创建的服务名称要与tamcat目录bin下service.bat中的名称一样。先看下名称 创建方法如下,用管理员方式运行cmd,进入到你tomcat下的bin文件如下图 然后运行service.bat install ApacheTomcat6Exam这样就创建好了,可以在服务里面看到我们创建的服务了,删除的话运行service.bat remove Apac...原创 2017-11-09 22:00:44 · 2496 阅读 · 0 评论 -
java tcp多人聊天室
TCP的多人聊天室上次写了一个只能两个人通信的TCP,这次写了个可以多人聊天的,利用多线程实现。设计模式:服务端:首先运行服务器,然后启动一个专门处理客户端消息的线程,然后监听是否有客户端连接,如果有人连接就单独为这个客户端开辟一个线程来处理。有多少人就开辟几个线程,并把客户端的消息放到消息集合里面,并把这些消息发送给出自己之外的其他所有人。客户端:连接服务器后就会发送一条消息给服...原创 2018-04-04 21:41:09 · 4930 阅读 · 0 评论 -
TCP实现聊天功能
最近复习了下TCP,写了个聊天demo服务端:import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.ServerS...原创 2018-03-29 15:33:04 · 1252 阅读 · 2 评论 -
==和equals()方法的区别
==号和equals()方法都是比较是否相等的方法,那它们有什么区别和联系呢?首先,==号在比较基本数据类型时比较的是值,而用==号比较两个对象时比较的是两个对象的地址值:int x = 10;int y = 10;String str1 = new String("abc");String str2 = new String("abc");System.out.println(...转载 2018-05-13 11:42:24 · 991 阅读 · 0 评论 -
Java之实现Serializable接口的类,transient关键字
我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。 序列化是编程的一种解决问题的方式。JAVA序列化就是将对象按照某种协议格式(某种约定方式)放入一个buffer中,其目的是便于网...原创 2018-05-12 15:14:34 · 2780 阅读 · 0 评论 -
多线程之争用条件
什么是争用条件?当多个线程同时访问同一数据(内存区域)时,每个线程都尝试操作改数据,从而导致数据被破坏(corrupted),这种现象称为争用条件。下面用一个案例来说明。案例:100个人之间进行相互转账,每个人都有一张银行卡,卡里1000元。在转账的时候都由银行的系统来操作。银行系统:package com.smxy.people;/** * * @Descript...原创 2018-04-23 14:34:49 · 2083 阅读 · 0 评论 -
Java中的static关键字
一.static关键字的用途 在《Java编程思想》P86页有这样一段话: “static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。” 这段话虽然只是说明了static方法的特殊之处,但是可以看出static关键字的基本作用...转载 2018-04-06 16:59:29 · 841 阅读 · 0 评论 -
Java多态
多态:就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编译时并不确定,而是在程序运行期多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编译时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改...原创 2018-04-12 19:15:37 · 1032 阅读 · 0 评论 -
方法重写与方法重载的区别
一、方法重写(0veriding)在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量。子类可以定义新的特征,当子类需要修改父类的一些方法进行扩展,增大功能,程序设计者常常把这样的一种操作方法称为重写,也叫称为覆写或覆盖。重写体现了Java优越性,重写是建立在继承关系上,它使语言结构更加丰富。在Java中的继承中,子类既可以隐藏和访问父类...转载 2018-04-12 16:46:04 · 869 阅读 · 0 评论 -
用java查看有没有运行进程,或者关闭进程
查看是否有在运行cmd.exe,代码如下import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Scanner;public class Main { /** * @param args */ public sta原创 2017-10-13 23:45:44 · 1801 阅读 · 0 评论