Java
若水三千你是一千
这个作者很懒,什么都没留下…
展开
-
Java 安全管理器
问题什么是安全管理器SecurityManager 安全管理器AccessController 访问控制器安全管理器的作用,权限策略文件解答什么是安全管理器安全管理器在Java语言中的作用就是检查操作是否有权限执行。是Java沙箱的基础组件。我们一般所说的打开沙箱,也是加-Djava.security.manager选项 public FileInputStream...原创 2018-12-10 22:30:27 · 829 阅读 · 0 评论 -
Java多线程探究-读写锁ReentrantReadWriteLock
读写锁实际是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。这种锁相对于自旋锁而言,能提高并发性,因为在多处理器系统中,它允许同时有多个读者来访问共享资源,最大可能的读者数为实际的逻辑CPU数。写者是排他性的,一个读写锁同时只能有一个写者或多个读者(与CPU数相关),但不能同时既有读者又有写者读写锁的场景 如果很多线程从一个数原创 2017-04-16 14:14:13 · 754 阅读 · 0 评论 -
JavaMail发送邮件
概述 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。JavaMail是可选包,因此如果需要使用的话你需要首先从java官网上下载。目前最新版本是JavaMail1.5.0[1] ,使用JavaMail的时候需原创 2017-05-01 22:17:23 · 561 阅读 · 0 评论 -
Java多线程探究-阻塞队列
Java 中的阻塞队列 BlockingQueue 方法以四种形式出现,对于不能立即满足但可能在将来某一时刻可以满足的操作,这四种形式的处理方式不同:第一种是抛出一个异常,第二种是返回一个特殊值(null 或 false,具体取决于操作),第三种是在操作可以成功前,无限期地阻塞当前线程,第四种是在放弃前只在给定的最大时间限制内阻塞。下表中总结了这些方法: BlockingQueue接口主要有原创 2017-04-14 23:26:39 · 400 阅读 · 0 评论 -
Flink实现WordCount
import org.apache.flink.api.common.functions.FlatMapFunction;import org.apache.flink.api.java.DataSet;import org.apache.flink.api.java.ExecutionEnvironment;import org.apache.flink.api.java.tuple.Tup原创 2017-04-14 15:29:02 · 4281 阅读 · 0 评论 -
Java多线程探究-死锁例子
Java死锁例子public class ThreadSyn2 implements Runnable { private static Object obj1 = new Object(); private static Object obj2 = new Object(); /** * @param args */ public static voi原创 2017-04-14 10:19:14 · 569 阅读 · 0 评论 -
Java多线程探究-死锁原因
进程死锁及解决办法 一、要点提示(1) 掌握死锁的概念和产生死锁的根本原因。(2) 理解产生死锁的必要条件--以下四个条件同时具备:互斥条件、不可抢占条件、占有且申请条件、循环等待条件。(3) 记住解决死锁的一般方法,掌握死锁的预防和死锁的避免二者的基本思想。(4) 掌握死锁的预防策略中资源有序分配策略。(5) 理解进程安全序列的概念,理解死锁与安全序列的关系。(6原创 2017-04-14 10:14:49 · 798 阅读 · 0 评论 -
Java多线程探究-关键字volatile解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们转载 2017-04-13 11:31:05 · 582 阅读 · 0 评论 -
Java多线程探究-线程局部变量ThreadLocal
TheadLocal可以为各个线程提供各自的实例。例如SimpleDateFormat是非线程安全的 假设有一个静态变量 public static final SimpleDateFormat dateFormat = new SimpleDateFormat(‘yyyy-MM-dd); 如果两个线程都执行下列操作: String dateStamp = dateFormat.format原创 2017-04-12 22:43:46 · 5576 阅读 · 0 评论 -
Java多线程探究-线程属性
线程优先级Java中,每一个线程都有一个线程优先级。默认情况下,一个线程继承它的父线程的优先级。 设置优先级,使用Thread的setPriority方法 优先级的范围为Thread.MIN_PRIORITY 到 Thread.MAX_PRIORITY 这两个代表1到10,setPriority的参数必须在1到10之间,否则会抛异常,Thread.NORM_PRIORITY为5 当线程原创 2017-04-12 20:18:16 · 774 阅读 · 0 评论 -
Java多线程探究-Lock对象锁条件变量
Lock锁的条件变量 设想这样的一种情况,现在有一个盘子,一个线程负责往盘子里放一个苹果,一个线程从盘子取一个苹果,如何保证线程A放一个苹果,线程B就把这个苹果取了,不会出现已经放了好几个了,线程B才一个一个的取,现在限定一个条件,盘子里每次只能放一个苹果,由于两个线程随机执行,不能保证线程A刚放了苹果,线程B就刚好取了。如果用通用的思想的话怎么做呢应该是加条件判断,线程A每次放的时候,判断盘原创 2017-04-12 18:08:50 · 3294 阅读 · 0 评论 -
Java多线程探究-Lock锁对象
Lock是JDK1.5后提供的对象锁 看一下Lock类的类图 Lock的使用class MyRunnable implements Runnable { private int ticket = 100; private Lock myLock = new ReentrantLock(); @Override public void run() {原创 2017-04-12 15:37:09 · 816 阅读 · 0 评论 -
Java多线程探究-线程异常逃逸
线程逃逸 在Thread的run方法中,Java是不允许抛出受检异常的,所以必须由自己捕获,但是对于一些运行时的异常,难免有时候完全捕获到,继而传递到上一层,导致不可预料的程序终止,所以需要在上一层捕获来看看我们到底不能捕获未受检异常 异常类class MyRunnable implements Runnable { private int ticket = 10000;原创 2017-04-12 14:45:24 · 3997 阅读 · 0 评论 -
Java多线程探究-线程状态
1.new(新建)当创建一个线程以后,还没有执行start方法,这时候这个线程的状态就是new,该线程并没有开始执行2.Runnable(可运行)调用start方法以后,该状态的线程位于可运行线程池中,等待CPU的时间来运行3.Running(运行)可用行的线程获得了CPU时间片,运行代码4.Blocked(阻塞)线程因为某种原因放弃了CPU使用权,暂时停止运行,直到线程进入runnable状态,才原创 2017-04-11 19:05:22 · 661 阅读 · 0 评论 -
Java本地方法
什么是本地方法在Java中,有些方法涉及到与操作系统交互,获取和使用操作系统的硬件或软件的资源,单纯的用Java实现要么实现很困难,或者不能实现,这时候就要使用本地方法,本地方法就是用其他语言写的方法,然后在JVM中调用本地方法的定义本地方法在很多类中都有所见,比如Object类的clone方法protected native Object clone() throws CloneNotSuppor原创 2017-04-21 00:08:06 · 1999 阅读 · 0 评论 -
Unicode和UTF-8的区别
很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为”字节“。再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器称为”计算机“。开始计算机只在美国用。八位的字节一共可以组合出256(2的8次方)种不同的状态。 他们把其中的编号转载 2017-05-03 18:29:53 · 559 阅读 · 0 评论 -
Java 加密解密
问题消息签名对称加密非对称加密CASSL原创 2018-12-13 23:09:48 · 532 阅读 · 0 评论 -
Java Web
问题SocketServerSocketInetAddress多线程ServerSocketURLURIEmail解答原创 2018-12-08 23:37:22 · 495 阅读 · 0 评论 -
Java类加载器
类加载器就是jia加载其他类的代码类加载器类加载器的种类类加载器加载的路径双亲委托机制代理模式Classloader类URLClassloader类定义自己的类加载器当前线程的类加载器findClassloadClassClass.forName方法setCurrentThreadClassLoadergetCurrentThreadClassloader...原创 2018-11-27 23:06:30 · 238 阅读 · 0 评论 -
Java 序列化与反序列化
序列化问题什么是序列化什么是反序列化序列化的方法反序列化的方法transient关键字的含义原创 2018-11-27 22:28:00 · 303 阅读 · 0 评论 -
JVM 系列积锦
问题JVM 参数JVM 类加载机制原创 2018-12-04 23:00:17 · 290 阅读 · 0 评论 -
Java对象克隆
问题什么是克隆对象克隆的方法浅拷贝和深拷贝解答克隆是创建对象的方式之一,通过克隆可以将原有的对象完全克隆出一个新的对象且该对象的所有属性被复制过来。在对象比较复杂的时候,克隆为一种效率高的方式。对象克隆的方法被克隆的类要覆写Object的clone,并改为public被克隆的类要实现Cloneable接口例子:class Student implements C...原创 2018-11-29 22:10:02 · 361 阅读 · 0 评论 -
Java NIO
问题什么是nionio Buffernio Channel解答什么是nioNIO是为了弥补传统I/O工作模式的不足而研发的,NIO的工具包提出了基于Selector(选择器)、Buffer(缓冲区)、Channel(通道)的新模式;Selector(选择器)、可选择的Channel(通道)和SelectionKey(选择键)配合起来使用,可以实现并发的非阻塞型I/O能力nio ...原创 2018-12-02 10:57:57 · 268 阅读 · 0 评论 -
Java RMI远程对象调用
RMI调用RMI(即Remote Method Invoke 远程方法调用)。在Java中,只要一个类extends了java.rmi.Remote接口,即可成为存在于服务器端的远程对象,供客户端访问并提供一定的服务。JavaDoc描述:Remote 接口用于标识其方法可以从非本地虚拟机上调用的接口。任何远程对象都必须直接或间接实现此接口。只有在“远程接口”(扩展 java.rmi.Remote 的原创 2017-04-26 22:35:33 · 742 阅读 · 0 评论 -
Java动态编译
JDK6.0引入了新的编译API新API功能简介JDK 6 提供了在运行时调用编译器的 API,后面我们将假设把此 API 应用在 JSP 技术中。在传统的 JSP 技术中,服务器处理 JSP 通常需要进行下面 6 个步骤 1. 分析 JSP 代码; 2. 生成 Java 代码; 3. 将 Java 代码写入存储器; 4. 启动另外一个进程并运行编译器编译 Java 代码; 5. 将类文件原创 2017-04-24 21:12:10 · 449 阅读 · 0 评论 -
Java平台的脚本
Java可以通过脚本引擎来调用脚本语言,比如JavaScript,Groovy等 脚本引擎 脚本引擎是一个可以执行用某种特定语言编写的脚本的类库。当虚拟机启动的时候,它会发现可用的脚本引擎。获取引擎并执行JavaScript脚本public class ScriptStudy { public static void main(String[] args) throws Script原创 2017-04-23 22:30:37 · 960 阅读 · 0 评论 -
Java安全之消息摘要
什么是消息摘要 消息摘要(Message Digest)又称为数字摘要(Digital Digest)。它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生。如果消息在途中改变了,则接收者通过对收到消息的新产生的摘要与原摘要比较,就可知道消息是否被改变了。因此消息摘要保证了消息的完整性。 消息摘要采用单向Hash 函数将需加密的明文”摘要”成一串128b原创 2017-04-22 15:11:52 · 1597 阅读 · 0 评论 -
几种编码方式的探究
几种常见的编码格式为什么要编码不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言。由于人类的语言有太多,因而表示这些语言的符号太多,无法用计算机中一个基本的存储单元—— byte 来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解。我们可以把计算机能够理解的原创 2017-05-04 15:03:24 · 2247 阅读 · 0 评论 -
Java类加载器
产生JDK1.0 概念将字节码加载到虚拟机加载器的种类系统加载器 其他加载器系统加载器引导类加载器 用来加载Java的核心库,使用原生代码实现的,并不继承java.lang.ClassLoader扩展类加载器 用来加载Java的扩展库。Java虚拟机会提供一个扩展库目录。该类加载这个目录的Java类系统类加载器 根据Java的classpath加载Java类。一般Java应用的类都是由原创 2017-04-22 12:27:10 · 434 阅读 · 0 评论 -
Java多线程探究-synchonrized原理分析
为了学习synchonrized,现在用javap 查看一下类的字节码1. 同步代码块public void salseTicket1() { synchronized (this) { if (ticket > 0) { System.out.println("线程 " + Thread.currentThread().原创 2017-04-11 16:13:40 · 1563 阅读 · 0 评论 -
Java多线程探究-多线程安全问题
接着Java多线程买票的程序来说class MyRunnable implements Runnable{ private int ticket =100; public void run() { while(true){ if(ticket>0){ System.out.println(Thread.cu原创 2017-04-10 23:50:03 · 530 阅读 · 0 评论 -
Java多线程探究-线程同步
什么是线程同步 线程同步是解决多个线程同时对同一数据进行操作,而导致的数据破坏 就像前面我写的卖票的例子,就出现了卖出-1的票,这样就出现了问题线程同步的方式1. synchronized关键字1. 同步方法在方便声明上加入synchronized,这样,这个方法就是同步了,每次只有一个线程可以执行方法的代码,如果这个线程没有离开方法,那么 其他线程只能处于阻塞状态,这样就保证了一次只原创 2017-04-11 13:24:10 · 504 阅读 · 0 评论 -
设计模式之-桥接模式
一、什么是桥接模式Bridge 模式又叫做桥接模式,是构造型的设计模式之一。Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。二、桥接模式的结构三、转载 2016-09-19 10:43:44 · 382 阅读 · 0 评论 -
Java导入Excel
Java解析Excel使用poi下面是两个实例(Excel2007)写入Excelpackage execel01;import java.io.FileOutputStream;import java.io.IOException;import org.apache.poi.ss.usermodel.Cell;import org.原创 2016-09-18 18:27:33 · 634 阅读 · 0 评论 -
设计模式之-外观模式
Facade外观模式,是一种结构型模式,它主要解决的问题是:组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。在这里我想举一个例子:比如,现在有一辆汽车,我们(客户程序)要启动它,那我们就要发动引擎(子系统1),使四个车轮(子系统2)转动。但是实际中我们并不需要用手推动车轮使其转动,我们踩下油门,此时汽车再根据一些其他的操作使车轮转载 2016-09-18 14:56:14 · 361 阅读 · 0 评论 -
设计模式之-代理模式
. 简介代理模式(Proxy Pattern)是GoF 23种Java常用设计模式之一。代理模式的定义:Provide a surrogate or placeholder for another object to controlaccess to it(为其他对象提供一种代理以控制对这个对象的访问)。使用代理模式创建代理对象,让代理对象控制目标对象的访问(目标对象可以是远程的对象原创 2016-09-17 17:02:58 · 361 阅读 · 0 评论 -
设计模式之-装饰模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述装饰(Decorator)模式的: 装饰模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。装饰模式的结构 装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任。换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰模式可以在不使用创造更多子类的情转载 2016-09-17 12:21:33 · 281 阅读 · 0 评论 -
设计模式之-原型模式
原型模式定义用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建原型模式通用源码:public class PrototypeCla原创 2016-09-15 10:06:07 · 400 阅读 · 0 评论 -
设计模式之-适配器模式
现实生活中的适配器本文讨论适配器模式。适配器模式是23中设计模式之一,它的主要作用是在新接口和老接口之间进行适配。它非常像我们出国旅行时带的电源转换器。为了举这个例子,我还特意去京东上搜了一下电源转换器,确实看到了很多地方的标准不一样。我们国家的电器使用普通的扁平两项或三项插头,而去外国的话,使用的标准就不一样了,比如德国,使用的是德国标准,是两项圆头的插头。如果去德国旅游,那么我们使转载 2016-09-14 14:32:11 · 356 阅读 · 0 评论 -
设计模式之-工厂模式
设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象。 在转载 2016-09-13 18:09:44 · 291 阅读 · 0 评论