java基础
Alyson_jm
这个作者很懒,什么都没留下…
展开
-
死锁避免——银行家算法
死锁两个或者两个以上的线程在执行过程中由于竞争资源而造成的阻塞问题,若无外力作用,他们将无法推进下去,此时系统处于死锁状态。安全序列安全序列是指对当前申请资源的进程排出一个序列,保证按照序列分配资源完成进程,不会发生死锁问题我们假设有进程P1,P2,…Pn则安全序列要求满足:Pi(1<=i<=n)需要资源<=剩余资源 + 分配给Pj(1 <= j < i)资...原创 2019-04-27 16:12:38 · 867 阅读 · 2 评论 -
java 线程 —— 线程的三种创建方式
目录线程概述线程的三种创建方式继承的方式实现的方式匿名内部类线程概述进程:进程通俗的来说就是一个程序的执行过程,进程是动态的。程序:静态代码段,是一组指令的有序集合。线程:线程就是进程里面的一个执行路径。多线程:多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。...原创 2018-09-20 20:07:57 · 318 阅读 · 0 评论 -
java 线程——ReentrantLock 源码解析
ReentrantLock 源码解析(源码基于JDK 1.7.80)属性构造方法可重入非公平锁获取锁步骤总结可重入公平锁加锁总结步骤锁的释放小结属性构造方法 ReentrantLock 类只有两个构造方法,默认的构造方法为非公平锁。ReentrantLock(boolean fair) 当 fair 为true 时是公平锁,...原创 2018-09-25 22:54:34 · 898 阅读 · 0 评论 -
java 线程——可重所锁&不可重入锁
不可重入锁当前线程已经获取了锁,当这个线程再次尝试获取这个锁的时候就会获取不到被阻塞,我们来写一个不可重入锁的例子。class Lock{ private boolean lock = false; /** * 加锁 * 当lock = true;说明当前对象拿着锁 */ public synchronized void lock() throws Exception{...原创 2018-09-23 12:45:46 · 378 阅读 · 0 评论 -
java 线程——偏向锁&轻量级锁&重量级锁
本文学习内容线程阻塞的代价Mark word 偏向锁轻量级锁轻量级锁的加锁过程释放线程锁的过程重量级锁相关文章线程阻塞的代价java的线程是映射到操作系统原生线程之上的,如果要阻塞或唤醒一个线程就需要操作系统介入,需要在户态与核心态之间切换,这种切换会消耗大量的系统资源。我们所熟知的Synchronized 在竞争锁失败的情况下就会进入阻塞状态,这种线程...原创 2018-09-23 12:05:07 · 608 阅读 · 0 评论 -
java IO —— 转换流详解
目录转换流概述InputStreamReader 字节数组转换成字符串继承关系构造方法示例OutputStreamWriter 字符串转化成字节数组继承关系构造方法示例转换流概述特点其是字符流和字节流之间的桥梁 可对读取到的字节数据经过指定编码转换成字符 可对读取到的字符数据经过指定编码转换成字节字符流和字节流的区别是什么?字符流=字节流+...原创 2018-08-05 22:21:35 · 1264 阅读 · 0 评论 -
java IO——缓冲流详解
本篇博客学习一下内容缓冲流概述BufferedInputStream 字节输入缓冲流构造方法BufferedOutputStream 字节输出缓冲流构造方法flush() 和 close()BufferedReader 字符输入缓冲流构造方法BufferedWriter 字符输出缓冲流构造方法总结缓冲流概述缓冲流是对文件流处理的一种流,它本身并不...原创 2018-08-05 19:00:20 · 3558 阅读 · 0 评论 -
java IO ——文件流详解
本篇博文学习了一下内容FileInputStream 字节输入流构造方法读取文件FileOutputStream 字节输出流构造方法写入文件FileRearder 字符输入流构造方法读取文件FileWriter 字符输出流构造方法写出文件字节文件和字符文件总结FileInputStream 字节输入流构造方法构造方法 方法 ...原创 2018-08-05 16:55:07 · 624 阅读 · 0 评论 -
java IO——File 类详解
本篇博客学习内容File 类概述File 类构造方法File 相关方法访问文件名目录操作相关文件操作相关文件检测获取常规信息文件名过滤器文件过滤器File 类概述1. 凡是与输入、输出相关的类、接口等定义都在java.io包下2. File 是一个类,可以有构造器创建其对象,此对象对应着一个文件(.txt .avi .doc .ppt ...原创 2018-08-05 12:29:42 · 644 阅读 · 0 评论 -
java IO —— IO 概述
IO 概述目录IO 概述IO 原理IO分类按照流向按照操作单元按照流的角色IO 流体系File 类文件流缓冲流转换流打印流数据流 IO 原理 IO流用来处理设备之间的数据传输。 Java程序中,对于数据的输入/输出操作以"流(stream)" 的方式进行。 java.io包下提供了各种"流"类和接口,用以获取...原创 2018-08-05 00:28:14 · 847 阅读 · 0 评论 -
中兴捧月——婚姻匹配问题
题目:建立一个模型,来模拟推导社会男女择偶过程。为了模型简化,一个人的特性指标有三个,这里假设为财富、样貌、品格,每个指标均可取值1-100之间任意数字。同样也对这3项指标有自己的需求。这3个需求值取值范围都在1-98间,当然三者的和必须为100.所以任意一个人可以用以下数组来表述:G(A、B、C、A1、B1、C1)G代表男,M代表女。举例G11(80、50、40、10、30、60...原创 2018-07-26 17:07:15 · 987 阅读 · 1 评论 -
java 集合—— Map 实现类之 LinkedHashMap
LinkedHashMap 概述 源码基于jdk 1.7.81LinkedHashMap 继承自 HashMap,实现了 Map 接口,所以它具有 Map 的所有方法和特性,同时 LinkedHashMap 继承了 HashMap 所有非私有的成员变量方法。public class LinkedHashMap<K,V> extends HashMap<K,V&g...原创 2018-07-19 22:34:47 · 426 阅读 · 0 评论 -
java线程——线程的常用方法
方法详解start() 和 run() 方法setName() 和 getName()setPriority() 和 getPriority()setDaemon() yield() 和 join()interrupt() 线程常用方法 方法 功能 start() 启动线程并执行相应的run()方法 run() 线程要执行的代码放入run(...原创 2018-09-20 23:34:01 · 455 阅读 · 0 评论 -
java 线程——线程的状态及其状态的转换
线程的状态NEW :新创建线程,初始态RUNNABLE : 可运行状态,当前状态的线程位于“可运行线程池”中,变得可运行,只等待获取cpu的使用权,即当前线程获得了除cpu以外的所有资源。RUNNING : 正在运行。此时线程获得了cpu的使用权,执行程序代码BLOCKED:阻塞状态。线程因为某种原因放弃了cpu的使用权,暂时停止运行,直到线程进入就绪态才有机会转换到运行态。阻...原创 2018-09-21 22:44:42 · 319 阅读 · 0 评论 -
java 线程——线程池
本文学习内容目录线程池概述ThreadPoolExecutor 的实现原理继承关系属性阻塞队列拒绝策略构造方法ThreadPoolExector 类的几个重要方法任务的提交关闭线程池shutdown()shutdownNow()相关文章线程池概述 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建...原创 2018-09-27 15:22:20 · 317 阅读 · 0 评论 -
java 线程——死锁
两个或者两个以上的线程在执行过程中由于竞争资源而造成的阻塞问题,若无外力作用,他们将无法推进下去,此时系统处于死锁状态。死锁产生的原因因竞争资源产生死锁进程顺序推进不当发生死锁(数据库层面上也会有死锁发生)死锁产生的必要条件:互斥条件:资源每次只能是一个线程使用请求与保持条件:一个线程因请求资源而阻塞时,对已获取的资源保持不放不可剥夺条件:线程已获取的资源在未使用之前不能强...原创 2019-04-27 11:54:32 · 230 阅读 · 0 评论 -
序列化与反序列化
序列化:将对象转化为字节的过程称为序列化反序列化:将字节转化成对象的过程称为反序列化序列化需要的接口java.io.Serializable、java.io.Externalizable、ObjectOutput、ObjectInput、ObjectInoutStream、ObjectOutputStream对象的序列化保存的是对象的“状态”,即它的成员变量,由此可知,对象的序列化不会关注...原创 2019-03-22 23:25:56 · 225 阅读 · 0 评论 -
网络编程——IP协议
文章目录IP地址网络标识与主机标识子网掩码路由控制IP协议在网络通信模型中处于网络层,用于在“连接到网络中的所有主机中识别出进行通信的目标地址”。因此,在 TCP/IP 通信中所有主机或路由器必须设定自己的 IP 地址。IP地址网络标识与主机标识IP地址由网络标识与主机标识两部分组成。IP地址分为A、B、C、D四类,是根据 IP 地址中从第 1 位到第 4 位的比特列对其网络标识和主机标...原创 2018-11-04 20:27:50 · 498 阅读 · 0 评论 -
同步、异步、阻塞、非阻塞
文章目录用户空间和内核空间I/0模型同步&amp;amp;异步阻塞&amp;amp;非阻塞用户空间和内核空间用户空间:用户空间是常规进程所在的区域,是非特权的空间,在该空间运行的代码不能访问硬件设备内核空间:是操作系统所在的区域,是特权空间,能与设备控制器通讯,控制着用户区域进程的运行状态,最重要的是所有的I/O都直接或间接的通过内核空间。运行内容是否有特权是否可以访问硬件用户进程...原创 2018-11-04 20:30:22 · 245 阅读 · 0 评论 -
java基础——String 引用类型
JVM 内存模型概述Java中的jvm分为:堆、栈、本地方法栈、方法区和程序计数器。堆:存储的全部是new出来的对象。栈:存储基本类型的变量数据和对象的引用。方法区:又称静态区,包含所有的class和static变量。常量池:存储编译时已经确定的值。(在堆里面)String 类型 String str1 = "Tulun"; String str2 = "Tulun"; ...原创 2018-10-07 22:06:39 · 1113 阅读 · 0 评论 -
java 基础——二维数组的拷贝
文章目录for 循环拷贝基本类型引用类型clone 方式拷贝基本类型引用类型System.arraycopy()基本类型引用类型Arrays.copyOf()基本类型引用类型总结for 循环拷贝基本类型 public static void main(String[] args) { int[][] array1 = {{10,10,10},{10,10,10}}; ...原创 2018-10-07 11:15:20 · 1633 阅读 · 0 评论 -
java 基础——一维数组的拷贝
深拷贝浅拷贝原创 2018-10-06 23:18:31 · 945 阅读 · 0 评论 -
四种常用线程池
我们从源码来分析一下四种常见的线程池,我们常见的四种线程池分别为newCachedThreadPool、newFixedThreadPool、newSingleThreadExecutor、newScheduleThreadPool。这四种线程池本质上也是ThreadPoolExecutor,只是这些参数都是固定好了的,我们可以直接使用。newCachedThreadPool pu...原创 2018-09-28 08:30:30 · 869 阅读 · 0 评论 -
java 线程——乐观锁&悲观锁
乐观锁适用场景实现方式版本号机制CAS悲观锁适用场景缺点 相关文章乐观锁每次读取数据的时候总是认为不会被人拿数据,所以不去加锁,但是在更新的时候回去对比一下原来的值,看有没有被别人更改过。适用场景读操作比较多的时候,提高了吞吐量。实现方式版本号机制在数据表中加入了版本号,当数据被修改是版本号加一,每次更新数据的时候比较版本号是否是刚刚的...原创 2018-09-23 09:48:51 · 800 阅读 · 0 评论 -
哲学家进餐问题
问题描述哲学家就餐问题可以这样表述,假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考。吃东西的时候,他们就停止思考,思考的时候也停止吃东西。餐桌中间有一大碗意大利面,每两个哲学家之间有一只餐叉。因为用一只餐叉很难吃到意大利面,所以假设哲学家必须用两只餐叉吃东西。他们只能使用自己左右手边的那两只餐叉。哲学家就餐问题有时也用米饭和筷子而不是意大利面和餐叉来描述,因为很明显...原创 2018-09-22 15:34:02 · 4238 阅读 · 0 评论 -
java 线程——线程的通信
线程通信的三种方式同步while 轮询方式wait() / notify() 方式 线程通信的三种方式同步这里讲的同步是synchronized 关键字来实现线程间的通信,我们用代码来示范一下。class Obj{ int count = 0; public synchronized void add(){ //do something count++...原创 2018-09-22 15:16:47 · 318 阅读 · 0 评论 -
java 线程——synchronized 和 volatile 关键字
synchronized 和 volatile 关键字原子性、可见性、有序性原子性可见性有序性synchronized 关键字加在代码块上加在方法上加在静态方法上volatile 关键字synchronized 和 volatile 的区别原子性、可见性、有序性在讲这两个关键字之前,我们先来看一下几个概念原子性原子性是指一个操作时不可中断的,...原创 2018-09-22 13:21:04 · 687 阅读 · 0 评论 -
java 集合—— Map 实现类之 HashMap
HashMap 是 Map 的一个实现类,继承了 AbstractMap<K,V> 类,实现了 Map<K,V>、 Cloneable、Serializable 接口。HashMap 存储的key - value 对。源码基于jdk 1.7.81存储思想HashMap 采用的是链地址法来存储,解决了哈希冲突。用一个 table 数组来存储元素,每一个元素...原创 2018-07-05 22:59:10 · 324 阅读 · 0 评论 -
java 集合 —— Set 实现类之 HashSet
源码基于jdk 1.7.81HashSet 简介HashSet 是一个元素不能重复的集合。HashSet 中当添加的元素有重复时,添加失败。HashSet 是 Set 的一个实现类,而 Set 又继承了Collection 方法,并且没有添加多余的方法。HashSet 继承了AbstractSet 类。实现了 Cloneable 接口,说明它重写了clone()方法,可以被...原创 2018-07-23 18:19:10 · 447 阅读 · 0 评论 -
java 基础——基本数据类型
一、java的基本数据类型二、.基本类型之间的转换char类型不能和其他任何基本类型自动转换byte char short int long float double booleanbyte<(char = short)<int<long<float<doublechar:无符号的整数。必须强转的情况...原创 2018-05-07 23:45:29 · 162 阅读 · 0 评论 -
第一个HelloWorld
第一个HelloWorldpublic class HelloWorld{ public static void main(String[] args){ for(int i=0;i<args.length;i++){ System.out.println(i+":"+args[i]); } System.out.println("HelloWorld!"); }}pu...原创 2018-05-07 22:48:32 · 153 阅读 · 0 评论 -
经典排序算法——快速排序及其优化
快速排序快速排序的思想:通过一趟排序将数据分割成独立的两部分,其中一部分数据都比另一部分的所有数据都要小,然后再按照此方法对这两部分数据分别进行快速排序,可以递归的进行。时间复杂度:好的情况(无序的):O(nlog2n) 坏的情况(有序的):O(n^2)快速排序法不稳定。让我们先通过一个例子来了解一下:12 5 4 25 10 15...原创 2018-05-14 00:37:47 · 2260 阅读 · 0 评论 -
经典排序算法——希尔(Shell)排序
Shell(希尔)排序希尔排序(Shell Sort)是插入排序的一种,是对直接插入法排序的一种改进。插入排序请参考我的另一篇博文:经典排序算法—直接插入法排序希尔排序是按照分治法的思想,将原来的元素分成几个组,在组内采用直接插入法进行排序。时间复杂度:O(n^1.3~2.5) 不稳定如:6 9 2 7 5 3按照关键字进行分组:我们选取3 和 1 。首先按照关键字 3...原创 2018-05-13 23:15:59 · 821 阅读 · 0 评论 -
java 数据结构——java实现顺序表、单链表
线性表示数据结构的一种,它是 n 个具有相同特性的 数据元素的有限序列。顺序表顺序表指的是用一组地址连续的存储单元存储线性表中的数据元素,称为线性表的顺序存储结构或者顺序映像。线性表采用顺序存储的方式存储就称之为顺序表。一 . 顺序表的建立。class TestSqlist{ int usedSize;//当前有效的数据元素的个数。 int[] elem;//用一组地址连续...原创 2018-05-13 17:05:22 · 1223 阅读 · 0 评论 -
经典排序算法——冒泡法排序
一、冒泡法排序冒泡法排序就是每次两两比较,小的数字放前面,大的放后面,一趟下来最大的数就在数组的最后了。接着将剩下的数字继续采用冒泡法。冒泡法的核心就是两两比较。这只是一趟的排序,后面每一趟的排序都会将最大的数放到数组的后面,直到数组有序。我们用 java 来实现一下这个算法 public static void bubblesort(int[] array){ ...原创 2018-05-19 11:13:16 · 1005 阅读 · 0 评论 -
经典排序算法——选择排序
选择排序第1趟,在待排序记录array[0]~array[array.lenght-1]中选出最小的记录,将它与array[0]交换;第2趟,在待排序记录array[1]~array[array.lenght-1]中选出最小的记录,将它与array[1]交换;以此类推,第i趟在待排序记录array[i]~array[array.lenght-1]中选出最小的记录,将它与array[i]交换,使有序...原创 2018-05-19 10:49:21 · 305 阅读 · 0 评论 -
经典排序算法——直接插入排序算法
直接插入排序每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当位置上,直到所有待排序记录全部插入为止。直接插入排序是由两层嵌套循环组成的。外层循环标识并决定待比较的数值。内层循环为待比较数值确定其最终位置。直接插入排序是将待比较的数值与它的前一个数值进行比较,所以外层循环是从第二个数值开始的。当前一数值比待比较数值大的情况下继续循环比较,直到找到比待比较数值小的并将待比较数...原创 2018-05-19 10:35:42 · 644 阅读 · 0 评论 -
经典排序算法——基数排序法
基数排序法奇数排序法比较简单,只不过我们需要设置十个桶来分别暂时存储元素现在我们用一个例子简单的了解一下。1.比较个位数字,分别将它们放到对应号码的桶里。然后分别取出来(从桶底取出来)。2.比较十位数字,分别将它们放到对应号码的桶里。然后分别取出来(从桶底取出来)。2.比较百位数字,分别将它们放到对应号码的桶里。然后分别取出来(从桶底取出来)。这个过程下来就是排好序的数组啦。...原创 2018-05-19 00:28:04 · 1630 阅读 · 1 评论 -
经典排序算法——归并排序
归并排序归并合并简单来说就是先将数组分成组,然后再将组有序的合并起来。我们可以拿一个例子来分析一下。1 3 5 2 7 4 0我们将上面的数组分成两两一组(剩下不够一组的则单独分成一组)。【1 3】【5 2】【7 4】【0】拿出两个组来进行有序的合并。【1 3】【5 2】合并为【1 2 3 5】【4 7】【0】合并为【0 4 7】所以现在得到的是1 2 3 ...原创 2018-05-18 23:57:29 · 249 阅读 · 0 评论 -
java 数据结构——字符串匹配算法
1.用java实现 BF 算法BF算法又称为暴力算法,它的核心思想是:从下标为 0 处比较主串和子串,若相等,则依次向下比较,直到子串结束,则得到匹配结果,若不相等,则主串回溯到下标为 1 处和子串下标为 0 处比较,依次类推,直到得到结果。优点:比较容易理解,没有对主串和子串进行多余的处理。缺点:每次每次字符不匹配时,都要回溯到开始位置,时间开销大。大家可以按照下面的图来理解比较容易一些。下面用...原创 2018-05-12 00:24:26 · 2351 阅读 · 0 评论