![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
WayBling
SJTU 电子系研究生 研究方向图像处理,机器视觉,人工智能
展开
-
Java多线程(3)——同步与synchronized关键字
线程同步在单线程程序中,每次只做一件事情,后面的事情等待前面的事情完成才进行,但如果使用多线程程序,就会出现多个线程抢占资源的问题,线程的优先级部分地解决了这个问题,但还不够,Java提供线程同步机制来防止资源访问的冲突。先举一个例子来阐述线程不同步导致的问题:这类似于一个售票系统,查询票剩余数量,如果有票就买一张,剩余票量减1,初始有10张票。public class ThreadSafeTest原创 2016-10-11 17:19:38 · 1177 阅读 · 0 评论 -
Java多线程(4)——线程数据传递
线程数据传递在传统的同步开发模式下,当我们调用一个函数时,通过这个函数的参数将数据传入,并通过这个函数的返回值来返回最终的计算结果。但在多线程的异步开发模式下,数据的传递和返回和同步开发模式有很大的区别。由于线程的运行和结束是不可预料的,因此,在传递和返回数据时就无法象函数一样通过函数参数和return语句来返回数据。通过构造方法传递数据 :在创建线程时,必须要建立一个Thread类的或其子类的实例原创 2017-01-12 22:02:13 · 475 阅读 · 0 评论 -
Java多线程(8)——锁实现和重入锁
锁实现基础Lock接口Lock接口是JDK1.5新加入的,它可以实现比synchronized更丰富灵活的功能,同时也更易用。在Lock接口基础上建立了重入锁,读写锁等一系列并发控制工具,因此Lock接口以及和它紧密相关的同步器是需要理解的概念。Lock接口定义如下方法:void lock() 获取锁void unlock() 释放锁void lockInterrup原创 2017-07-22 21:52:56 · 820 阅读 · 0 评论 -
Java多线程(9)——ConcurrentHashMap
简介ConcurrentHashMap是Java并发家族concurrent包中非常重要的一个类。JDK6,7中的ConcurrentHashmap主要使用Segment来实现减小锁粒度,把HashMap分割成若干个Segment,在put的时候需要锁住Segment,get时候不加锁,使用volatile来保证可见性,当要统计全局时(比如size),首先会尝试多次计算modcount来确转载 2017-08-02 11:40:10 · 477 阅读 · 0 评论 -
Java集合框架(3)——HashMap
1,HashMap实现Map接口;Map接口内部定义了Entry接口,提供Map存储的键K值V对元素的方法。 2,HashMap用数组存储数据,用单链表或红黑树来处理哈希冲突。当数据较少使用单链表,较多转使用红黑树。 3,HashMap内部定义了实现Entry接口的Node类和TreeNode类来实现单链表和红黑树,存储元素的table是一个Node数组。 4,HashMap的重要参数:cap原创 2017-05-10 13:08:40 · 443 阅读 · 0 评论 -
Java String深入理解
如何比较两个字符串?使用“==”还是equals()方法?“==”测试的是两个对象的引用是否相同——地址等。 equals()比较的是两个字符串的值是否相等——值相等。 除非你想检查的是两个字符串是否是同一个对象,否则使用equals()来比较字符串。PS:intern的概念:http://blog.csdn.net/picway/article/details/60748823为什么针对安全保原创 2017-05-10 15:01:17 · 508 阅读 · 0 评论 -
Java抽象类与接口
2016/10/27定义和用法Java提供一种抽象方法的机制,抽象方法是不完整,只有声明而没有方法体,抽象方法用关键字abstract修饰:abstract void function(){}如果一个类包含一个或多个抽象方法,则这个类必须被限定为抽象类,非抽象类不能拥有抽象方法。抽象类不能实例化,但抽象类可以有多种构造器,供其子类使用。抽象类可以定义抽象方法和非抽象方法,非抽象方法不能有抽象方法。如原创 2016-10-27 20:25:11 · 428 阅读 · 0 评论 -
Java多线程(6)——死锁
Java死锁相关,持续深入原创 2017-03-04 11:06:52 · 336 阅读 · 0 评论 -
Java多线程(10)——ThreadLocal
ThreadLocal是Java框架中经常使用的工具。对于这个知识点,网上博文毛毛多,但有不少都存在一些错误。不过知识就是这样不断建立,发现问题,打破重建螺旋上升的过程。在此记录一下我的认识过程:第一层级:初识ThreadLocal顾名思义,线程局部变量。因此ThreadLocal是线程独占而非处理多线程同步问题的。这在一些博文中有误解。ThreadLocal就是在使用该对象的没一个线程中创建独立的原创 2017-08-22 13:15:12 · 327 阅读 · 0 评论 -
Java多线程(1)——基本实现方式
2016/10/11综合手中书本和多家博文总结于此,后半部分未编辑完善,明天要回学校,待之后完善。进程和线程: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1–n个线程。 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。 线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。 多进程是指操作原创 2016-10-11 20:14:53 · 3770 阅读 · 6 评论 -
Java垃圾回收机制
什么是Java垃圾回收Java垃圾回收机制(Gabage Collection)是Java与C/C++之间的巨大差距所在,但垃圾回收不是Java的专利,任何编程语言都可以考虑和设计垃圾回收。垃圾回收考虑三件事情: 1,哪些内存需要回收? 2,什么时候回收? 3,怎么回收?Java垃圾回收自动化地帮我们清理不再使用的内存,既然是“自动化”,为什么还要了解? 答:当需要排查内存泄漏和内存溢出问题原创 2017-03-07 16:18:43 · 449 阅读 · 0 评论 -
Java多线程(2)——线程状态,操作,优先级
线程生命周期线程具有生命周期,其中包括5种状态:New,Runnable,Running,Blocked,Dead1、新建状态(New):新创建了一个线程对象,在使用start()方法之前线程都处于新建状态或者叫出生状态。2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。3、运行状态(Run原创 2017-01-12 21:59:13 · 625 阅读 · 0 评论 -
Java多线程(5)——生产者消费者模式实践
package com.way.threads.consumerandproducer;public class Goods { private String name; private int num=0; private boolean havegoods=false; public synchronized void produce(String na原创 2017-01-15 22:26:39 · 435 阅读 · 0 评论 -
Java类加载机制
java.lang.ClassLoaderJava类加载机制的基本职责就是根据一个指定的类的全限定名,找到或者生成其对应的字节代码,然后从这些字节代码中定义出一个 Java 类,即 java.lang.Class类的一个实例。除此之外,ClassLoader还负责加载 Java 应用所需的资源,如图像文件和配置文件等。类加载器的树状组织结构Java 中的类加载器大致可以分成两类:一类是系统提供的,另原创 2017-03-13 20:44:48 · 316 阅读 · 0 评论 -
Java多线程(11)——线程池
http://www.importnew.com/19011.html在Java中可以通过线程池来达到这样的效果。今天我们就来详细讲解一下Java的线程池,首先我们从最核心的ThreadPoolExecutor类中的方法讲起,然后再讲述它的实现原理,接着给出了它的使用示例,最后讨论了一下如何合理配置线程池的大小。以下是本文的目录大纲:一.Java中的ThreadPoolExecutor类二.深入剖析转载 2017-09-03 09:50:39 · 298 阅读 · 0 评论 -
Java正则化
匹配验证-验证Email是否正确public static void main(String[] args) { // 要验证的字符串 String str = "service@xsoftlab.net"; // 邮箱验证规则 String regEx = "[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a转载 2017-11-20 14:38:40 · 1057 阅读 · 0 评论 -
Java多线程(0)——线程与进程的区别
1、线程的基本概念概念:线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。好处 :(1)易于调度。(2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线原创 2017-03-01 16:56:33 · 448 阅读 · 0 评论 -
Java多线程(7)——ExecutorService 的理解与使用
接口 Java.util.concurrent.ExecutorService 表述了异步执行的机制,并且可以让任务在后台执行。壹個 ExecutorService 实例因此特别像壹個线程池。事实上,在 java.util.concurrent 包中的 ExecutorService 的实现就是壹個线程池的实现。ExecutorService 样例这里有壹個简单的使用Java 实现的 Exector转载 2017-07-20 20:16:59 · 868 阅读 · 0 评论 -
Java反射机制
介绍Java反射机制是很多框架使用的基础.当程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言。 我们认为java并不是动态语言,但是它却有一个非常突出的动态相关机制,俗称:反射。反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方法和属性; 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的原创 2017-03-05 00:14:28 · 353 阅读 · 0 评论 -
Java知识碎片整理(1)——数组相关
数组是最常见的一种数据结构,是同类型的,用一个标识符封装在一起的基本数据序列或对象序列(在Java中所有的东西都是对象,但在C++中可能是对象,结构体等)。数组使用:声明——>内存分配——>初始化声明:int arr[];String arr2[];内存分配:arr=new int[5];使用new关键字为数组分配内存时,整形数组各个元素的初始值均为0。初始化:int arr[]=new int[原创 2016-10-06 10:58:11 · 353 阅读 · 0 评论 -
Java知识碎片整理(2)——异常处理
2016/10/6异常是一个程序执行期间发生的事件,它中断了正在执行的程序的正常指令流。在Java中,异常被封装到了一个类中,当程序出现错误时,会创建一个异常对象并把它传递给正在运行的系统,从而触发异常处理机制。这样可以将程序主逻辑和异常处理代码分离开。异常捕捉机制Java异常捕捉结构:try,catch,finallytry{ //可能发生异常的主逻辑代码}catch(Exceptio原创 2016-10-06 13:14:58 · 314 阅读 · 0 评论 -
Java——手撕字节码
这两天在看《深入理解Java虚拟机》,其中字节码那部分看得我极其烦躁,最后决定亲子拆解一遍它的例子,拆完后觉得印象深刻多了。字节码拆解实验对书上的例子进行了实现和分析,几个部分需要对照,相互印证,同时结合下面的理论部分才能明白。Java代码例子使用的Java代码和书上基本一样,只不过我写的时候包名不一样,代码如下:package com.way.clazz;public class TestClas原创 2017-03-08 18:48:39 · 640 阅读 · 0 评论 -
Java包装类
基本数据类型和其包装类Java共八种基本数据类型,六种数值类型:int,long,float,double,short,byte, 以及真假boolean和字符型char。每一个基本数据类型都对应着一个包装类,之所以需要包装类,是因为满足将基本数据类型当作一个对象来处理的需求。对应的包装类名是它们的大写全称字母:Integer,Long,Float,Double,Short,Byte,Boolean原创 2017-03-21 11:13:07 · 528 阅读 · 0 评论 -
Java泛型
泛型概述Java泛型是JavaSE1.5新加入的机制,它将Java面向对象的特点进一步强化。Java中每一个对象都属于一个类型,类可以继承,父类是子类的共性抽取,在类继承基础上出现了抽象类,抽象类是其子类的抽象,子类必须实现抽象类定义的方法,为了解决单继承问题以及面向“能力”编程思想,又出现了接口,接口定义了一些“能力”,实现它的类都将具有这些“能力”,因此接口是对抽象类的又一层深化。(另外还有注解原创 2017-03-21 14:39:56 · 294 阅读 · 0 评论 -
Java集合框架(2)—ArrayList源码分析
ArrayList是Java容器类中最重要的类之一,我将根据ArrayList源码,结合自己的认识,学习ArrayList的实现,以点破面,以期对Java集合类有一个全面的深入。以下是ArrayList源代码的outline: 1,类定义:public class ArrayListE> extends AbstractListE> implements List原创 2017-01-16 23:41:24 · 444 阅读 · 0 评论 -
Java内存分析(2)——栈和堆的区别(和C语言比较)
内存分配C/C++的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap)— 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回 收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局原创 2017-02-23 17:16:35 · 681 阅读 · 0 评论 -
Java内存分析(1)——内存分区和分配过程
我们已经习惯于写出类似Object obj=new Object();型的语句,然而背后究竟发生了什么?从JVM内存结构分析更有助于加深理解记忆。下面试着举例说明:JVM内存分区:如上图所示,JVM主要分为以上几块:程序计数器,本地方法栈,虚拟机栈,堆和方法区。稍微粗糙一些得分法是JVM分为栈和堆,栈包括虚拟机栈,本地方法栈,程序计数器,堆分为堆和方法区。需要说明的是这里所说的Java内存和硬件上的原创 2016-12-29 23:52:14 · 1741 阅读 · 0 评论 -
Java注解
概述注解是提高Java开发效率的重要工具。通过注解,很多配置文件和逻辑可以用注解来代替,使代码更加简洁,清晰。因此,大部分的开源框架都大量使用了注解,例如Spring中,注解配合反射实现的控制反转是其核心理念之一。注解的内容涵盖如图的内容:我将挑选其中必须的部分讲述。注解介绍:如图是java.lang.annotation包的结构:我们发现里面包含一个Annotation接口,五个以“@”开头的注释原创 2017-03-12 23:05:49 · 304 阅读 · 0 评论 -
Java随机数
为什么说Java中的随机数都是伪随机数?什么是伪随机数? 1.伪随机数是看似随机实质是固定的周期性序列,也就是有规则的随机。 2.只要这个随机数是由确定算法生成的,那就是伪随机,只能通过不断算法优化,使你的随机数更接近随机。 (随机这个属性和算法本身就是矛盾的) 3.通过真实随机事件取得的随机数才是真随机数。Java随机数产生方式:1,使用Math.random()方原创 2017-02-16 16:44:06 · 574 阅读 · 0 评论 -
Java集合框架(1)——概述
2016/10/6Java集合框架“如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这将是一个简单的程序”复杂的程序对于数据的组织有多种多样的需求,从中提取共性形成了Java的集合框架。下图摘自:http://www.importnew.com/23549.html#comment-542805如图所说,Java集合框架有Collection, Collections, Map, Com原创 2016-10-06 21:19:50 · 687 阅读 · 0 评论 -
JDBC基本操作(Statement,PreparedStatement,Connection,Transaction等)
JDBC与数据库连接,查询package jdbc;import java.sql.*;//数据库相关库public class TestJDBC { public static void main(String[] args) { final String DBDRIVER="org.mariadb.jdbc.Driver";//数据库连接驱动,对于每一种数据库都不一样原创 2016-11-30 19:31:57 · 3614 阅读 · 0 评论 -
Java内存分析(3)——String的Intern方法详解
原文地址:http://www.cnblogs.com/wxgblogs/p/5635099.html引言 在 JAVA 语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个JAVA系统级别提供的缓存。8种基本类型的常量池都是系统协调的,String类型的常量池比较特殊。它的主要使用方法有两种:直接使用转载 2017-03-07 09:42:11 · 507 阅读 · 0 评论 -
Java知识碎片整理(5)——static关键字与单例设计模式
2016/10/28static关键字用途如下:修饰静态变量修饰静态方法,或者叫实用用法(utility method)静态变量:静态变量是一个类的共有性质:all objects of one class share same static fields.一个实例的静态变量变化,这个类的其他实例的该变量同时发生变化。静态方法是通过类而非类的对象调用的方法,最典型的例子是Math类:doubl原创 2016-10-28 00:26:33 · 582 阅读 · 0 评论 -
Protobuf和Java
Protobuf简介Protobuf是Google开源的二进制序列化数据协议。具有语言和平台无关性,支持多种语言接口。Protobuf的优点:1,通用性:多种语言支持 2,速度快:较比其他序列化格式如Json,XML编解码速度更快 3,小:因为是二进制格式,所以更小缺点:1,没有自描述性:因为是二进制,内容经过编码Protobuf语法Protobuf定义的数据格式类似于Java中的entity,原创 2017-06-30 20:53:02 · 521 阅读 · 0 评论 -
一个命令行的实现示例
来自Alluxio源码/* * The Alluxio Open Foundation licenses this work under the Apache License, version 2.0 * (the "License"). You may not use this work except in compliance with the License, which is *...原创 2018-05-03 11:44:34 · 670 阅读 · 0 评论