- 博客(26)
- 收藏
- 关注
原创 Java多线程详解六 Thread类中的方法(1)
Thread类中的start()和run()方法start()方法被用来启动新创建的线程,而且start()内部调用了run()方法,这和直接调用run()方法的效果不一样,当你调用run()方法的时候,只是会在原来的线程中调用,没有启动新的线程,start()方法才会启动新线程。为什么wait,notify和notifyAll这些方法不在Thread类中主要的原因是JAVA提供的锁是对象级的而不是线程级的,每个对象都有锁,通过线程获得,如果线程需要等待某些锁,那么调用对象中的wait()方法就有意义
2021-06-03 23:31:04 226
原创 Java多线程详解五 volatile关键字
一旦共享数据(类的成员变量、类的静态变量)被volatile修饰后,那么久有两层含义:1.保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了这个变量的值,这个新值对其他线程来说是立即可见的。volatile关键字会强制将修改的值立即写入内存。2.禁止进行指令重排序。volatile不是原子性操作。什么叫保证部分有序性?当程序执行到volatile变量的读写操作时,在其前面的操作的更改肯定全部已经进行,且结果已经对后面的操作可见;在其后面的操作肯定还没有进行。x = 1; //语句1
2021-06-03 23:21:47 153
原创 Java多线程详解四 sleep()和wait()的区别
1.对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类的。2.sleep()方法导致了程序暂停执行指定的时间,让出cpu给其他线程,但是它的监控状态以然保持着,当指定的时间到了又会恢复运行状态。3.在调用sleep()方法的过程中,线程不会释放对象锁。4.而当调用wait()方法的时候,线程会放弃锁,进入等待此对象的锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定吃中准备获取对象锁进入运行状态。...
2021-06-03 23:14:04 391
原创 Java多线程详解三 notify()和notifyAll()的区别
notify可能导致死锁,而notifyAll不会。任何时候只有一个线程可以获得锁,也就是说只有一个线程允许synchronized中的代码使用notifyAll,可以唤醒。所有处于wait状态的线程,使其重新进入锁的争夺队列中,而notify只能唤醒一个。wait()应配合while循环使用,不应使用if,务必在wait()调用前后都检查条件,如果不满足,必须调用notify()唤醒另外的线程来处理,自己继续wait()直至条件满足再往下执行。notify()是对notifyAll()的一个优化,
2021-06-02 13:21:06 406
原创 Java多线程详解二 如何停止一个正在运行的线程
1.使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。2.使用stop方法强行终止,但是不推荐这个方法,因为stop和suspend及resume一样都是过期作废的方法。3.使用interrupt方法中断线程class MyThread extends Thread { volatile boolean stop = false; public void run() { while (!stop) { System.out.println(getName() +
2021-05-28 19:08:31 1160
原创 Java多线程详解一(重点)线程的创建方式
1.Java实现多线程的几种方式继承Thread类实现Runnable接口实现Callable接口通过FutureTask包装器来创建Thread线程使用ExecutorService、Callable、Future实现有返回结果的多线程(使用ExecutorService)来管理前三种方式。2.继承Thread类Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例,启动线程的唯一方法是通过Thread类的start()方法,start()方法是一个native方法,它
2021-05-28 18:19:28 113
原创 Java序列化相关
1.什么是序列化?如何实现序列化?序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内存流化,可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时引发的问题。序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有要实现的方法。只是为了标注该对象是可以被序列化的,然后使用用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream对象,接着,使用ObjectOutputStream对
2021-05-27 22:23:41 138
原创 Java反射相关
1.除了new创建对象之外,还可以用什么方法创建对象?使用Java反射2.Java反射创建对象效率高还是通过new创建对象效率高?通过new创建对象效率比较高,通过反射时,先查找类资源,使用类的加载器加载,过程比较繁琐,所以降低效率。3.Java中反射的作用?反射机制是指在运行时,对于任意一个类,都可以知道这个类的属性和方法(包括私有),对于任意对象,都能够调用它的任意一个方法,只要给定一个类的名字,就可以通过反射获取类的所有信息。这种动态获取信息以及动态调用对象的方法的功能称为反射。4.在哪
2021-05-26 23:36:20 95
原创 异常处理中throw与throws的区别
位置不同throws用在方法上,后面跟的是异常类,可以跟多个;而throw是用在方法内部,后跟异常对象。功能不同1.throws用来声明异常,让调用者知道该功能可能出现的问题,可以给出预先的处理方式2.throw抛出具体的问题对象,执行到throw,功能就已经结束了,跳转到调用者,并将具体的问题对象抛3.给调用者,也就是说throw语句独立存在时,下面不要定义其他语句,会执行不到。4.throws表现出异常的一种可能性,并不一定会发生这样的异常;throw则是抛出了异常,执行throw一定抛出某个
2021-05-24 16:47:54 490
原创 Java异常处理详解
关键字Java中的异常处理机制由关键字:try catch finally throw 和 throws组成。异常类型Java可抛出的结构分为三种类型:被检查的异常CheckedException,运行时异常RuntimeException和错误Error运行时异常(RuntimeException)定义:RuntimeException及其子类都被称为运行时异常特点:Java编译器不会检查他,也就是说,当程序中可能出现这类异常时,没有通过throws显式的声明抛出它,也没有用try-catch
2021-05-24 16:42:17 104
原创 ConcurrentHashMap详解
Segment段ConcurrentHashMap和HashMap底层思路是差不多的,但因为它支持并发操作,所以要复杂一些。整个ConcurrentHashMap由一个个Segment组成,Segment代表部分或一段的意思,所以很多时候描述其为分段锁。注:下文中的槽代表一个Segment。线程安全(Segment继承ReentrantLock)简单理解就是,ConcurrentHashMap是一个Segment数组,Segment通过继承ReentrantLock来进行加锁,所以每次需要加锁锁住的是
2021-05-24 16:24:30 792
原创 HashMap详解
HashMap(数组+链表+红黑树)HashMap根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因此具有很快的访问速度,但遍历顺序确是不确定的。HashMap最多只允许一条记录的键为null,允许多条记录的值为null。HashMap非线程安全,任意时刻有多个线程同时访问HashMap可能导致数据不一致,如果需要满足线程安全,可以使用Collections的synchronizedMap方法使HashMap具有线程安全的特性,或者使用ConcurrentHashMapJava7
2021-05-24 16:17:02 128
原创 ffmpeg处理mp4文件转换hls使用Video.js展示
一、下载ffmpeg点击这里前往ffmpeg官网选择windows合适的版本下载即可安装完成后在bin目录下有这三个程序二、配置环境变量这里指定到bin目录下然后打开cmd进行测试输入ffmpeg之后结果为这个即可。三、将MP4文件进行切割hls处理转换成m3u8文件在cmd窗口中输入以下命令:ffmpeg -i xxxxxxx.mp4 -c:v libx264 -hls_time 60 -hls_list_size 0 -c:a aac -strict -2 -f hls xx
2021-05-23 22:29:36 2243
原创 集合类存放于java.util包下,主要的接口说明
主要包含Set(集)、List(列表)、map(映射)。1.Collection:Collection是集合List、Set、Queue的父接口。2.Iterator:迭代器,用于遍历集合中的数据3.Map:是映射表的基础接口List接口是非常常用的数据类型,List是有序的Collection,共有三个实现类,分别是:ArrayList、Vector、LinkedListSet接口注重独一无二的特性,该体系的集合用于存储无序、不可重复的值。...
2021-05-23 21:48:15 670
原创 List,Set,Map的区别
LIst:是对付顺序结构的好帮手,List接口存储一组不唯一(可以有多个元素引用相同的对象),有序的对象。Set:注重独一无二的特性,不允许存储重复的元素,不会有多个元素引用相同的对象。Map:key-value结构,使用键值对存储数据,Map会维护与key有关联的值,两个key可以引用相同的对象(可以存储相同的value),但key不能重复,典型的key是String类型,但也可以是任意类型。...
2021-05-23 21:38:06 109
原创 Collection与Collections
Collection是集合类的上级接口,子接口有Set、List、ArrayList、Vector、Stack、Set。Collections是集合的一个工具类,它包含了各种关于集合操作的静态方法,用于实现对集合的搜索、排序、线程安全化等操作。此类不能被实例化,服务于Collection。...
2021-05-23 21:34:24 139
原创 HashMap和Hashtable对比
1.两者父类不同HashMap是继承于AbstractMap类,而Hashtable是继承于Dictionary类,不过他们都实现了map、Coneable、Serializable接口。2.对外提供的接口不同Hashtable
2021-05-23 16:59:32 776
原创 ArrayList和LinkedList
1.Array(数组)是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的,数组获取数据的时间复杂度是o(1),但是增加和删除数据的开销很大,它需要重新排序数组中的所有元素并赋值给新的数组。注:数组在初始化时必须指定初始化长度,否则报错。2.List是一个有序的集合,继承于Collection,可以包含重复的元素,它又两个重要的实现类,ArrayList和LinkedList。3.ArrayList可以看作是一个可以自动扩容的数组,ArrayList的底层就是一个数组,可以使用
2021-05-23 16:24:13 163
转载 转载一篇关于springBoot SLF4J报错的文章
springboot项目跑起来后,一直报SLF4J包冲突,看着很烦。Connected to the target VM, address: ‘127.0.0.1:64448’, transport: ‘socket’SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/D:/maven-3.3.3/m2/repository/ch/qos/logback/logback-classi
2021-03-10 17:20:05 420
原创 JAVA如何创建webservice简单的示例
前后端交互的技术有很多种,本文将介绍一种简单的webservice一:新建一个空白项目 可以是web项目,也可以是普通的java项目二:在项目模块右键选择添加框架支持三:选择webservice四:在src下的test包下会自动新建一个HelloWorld类五:运行之后进入address所给的端口网址,就可以看到生成好的webservice方法...
2021-02-08 15:58:53 432 1
原创 nginx的配置和反向代理
一. 环境准备CentOS7 JDK1.8 Nginx1.8.1二.先安装必须的工具gcc 和pcre、pcre-devel zlib openssl安装 gcc :命令: gcc –v(查看gcc版本)安装命令: yum – y install gcc(可以查看到gcc版本代表安装成功)pcre、pcre-devel:安装命令: yum install –y pcre pcre-develzib安装:安装命令:yum install –y zlib zlib-deve
2020-10-24 21:37:45 341 1
原创 JAVA中的冒泡排序算法
int[] arr = new int[]{33,5,22,-98,6,-76,0,-5};for (int i = 0; i < arr.length-1;i++){ for(int j =0;j < arr.lenth-1-i;j++) { if(arr[j] > arr[j+1]) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } }}
2020-10-08 16:32:48 86
原创 基于ArcGIS Engine地图操作的基本功能实现
1)移动地图代码axMapControl1.Pan();2)拉框放大地图代码axMapControl1.Extent = axMapControl1.TrackRectangle();3)拉框缩小地图代码double newMapExtentWidth; double newMapExtentHeight; double newMapExtentXmin; double newMapExtentYmin
2020-10-08 14:56:47 1182
原创 AE二次开发使用TextElement绘制标注
IFeatureCursor pFeatCursor; IFeatureClass pfeatClass; IFeatureLayer pfeatlayer; IFeature pfeature; IEnvelope pEnv; IRgbColor pColor; stdole.Font pFont; IPoint p...
2020-10-07 16:51:31 927 4
原创 GIS空间分析之公路选线
一、 实验目的掌握成本距离的使用方法,对实际问题进行空间分析。假设某地新建了一个小学。考虑到学生上学放学交通问题,打算修建一条公路与已有公路连接起来现在将修筑一条连接这两个区域的公路,在修建公路的时候需要考虑地形坡度问题和公路经过地区的土地利用情况,从而减少成本和工程难度。二、实验准备软件准备arcgis10.2数据准备:公路起点,已有公路,学校,土地利用,高程三、实验步骤1.将数据导入arcgis,然后先进行坡度的提取,空间分析工具—表面分析----坡度提取(slope),空间分析环境与高程一
2020-10-07 16:37:37 4312 1
原创 基于JAVA实现的二维数组和稀疏数组的相互转化
基于JAVA实现的二维数组和稀疏数组的相互转化public class Sparsearray { public static void main(String[] args) { //创建原始二维数组 //0:表示没有棋子,1表示黑子,2表示蓝子 int chessArr1[][] = new int[11][11]; chessArr1[1][2] = 1; chessArr1[2][3] = 2; //输出原始二维数组 for (int[] r...
2020-10-07 16:26:47 125
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人