try

Java 实现http请求的两种方式

穿精又带淫゛_ 提交于 2020-02-20 18:03:41
一、HttpClient4.5 CloseableHttpClient (CloseableHttpClient 实现 HttpClient 和 Closeable)需要导入jar包才可以使用,org.apache.httpcomponents:httpclient,需要导入httpclient-x.x.x.jar 包才能使用 注:maven项目下 , <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>x.x.x</version> </dependency> import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.apache.http.HttpEntity; import org.apache.http

JDBC学习笔记之JDBC工具类(九)

▼魔方 西西 提交于 2020-02-20 07:05:08
我们可以看到前面的Demo中都有非常多的 重复的代码 ,我们可以写一个 JDBC工具类 去封装这些 重复的代码 抽取JDBC工具类:JDBCUtils 目的:简化书写 分析: 1. 抽取注册驱动 跟连接对象用同样的方法解决,用 配置文件 2. 抽取一个方法获取连接对象 需求 :不想传递参数(麻烦),还得保证工具类的通用性 解决 :配置文件 jdbc.properties jdbc . properties url = user = password = 3. 抽取一个方法释放资源 由于释放的资源数量不定,所以使用 重载 Coding 我们写JDBC工具类定义的方法都是 静态方法 ,以便于调用 因为 动态方法 属于 示例对象 ,必须创建出对象才能调用 而 静态方法 属于 类 ,无需创建对象也能调用 连接对象 我们先来写 连接对象 : public static Connection getConnection ( ) throws SQLException { return DriverManager . getConnection ( url , user , password ) ; } url、user、password 我们用静态代码块( static )去加载,因为这些信息我们不希望每次调用JDBC工具类都获取一次,没有必要;而使用静态代码块就能恰到好处地只获取一次 url

3, Java核心技术1 带资源声明的 try 语句

非 Y 不嫁゛ 提交于 2020-02-20 05:17:53
带资源声明的 try 语句 try-with-resources 语句中的资源只能是实现了 java.lang.AutoCloseable 接口的类实例,但是 Java SE 7 之後的所有实现了 java.io.Closeable 的类都实现了 java.lang.AutoCloseable 接口(该接口是在Java SE 7中才引入的),故都可以作为这里的资源。 带资源的try 语句(try-with-resources ) 的最简形式为: try ( Resource res = . . . ) { work with res } 这里的 Resource 对象不必调用其close()方法进行关闭,而是会在退出try块(不论正常或异常退出)后自动关闭(后台会自动调用close()),释放资源。按 Java SE 7 之前的写法,BufferedReader 对象一般需要在try块後面的finally块中调用其close()方法关闭对象 try ( Resource res = . . . ) { work with res } finally { if ( res != null ) { res . close ( ) } } try 块退出时,会自动调用res.doseO。下面给出一个典型的例子, 这里要读取一个文件中的所有单词: try ( Scanner in =

【Java并发工具类】ReadWriteLock

房东的猫 提交于 2020-02-19 17:55:16
摘自: https://www.cnblogs.com/myworld7/p/12323467.html 阅读目录 前言 什么是读写锁 ReentrantReadWriteLock 实现一个快速缓存 缓存数据的初始化 实现缓存的按需加载 读写锁的升级与降级 小结 回到目录 前言 前面介绍过 ReentrantLock ,它实现的是一种标准的互斥锁:每次最多只有一个线程能持有ReentrantLock。这是一种强硬的加锁规则,在某些场景下会限制并发性导致不必要的抑制性能。互斥是一种保守的加锁策略,虽然可以避免“写/写”冲突和“写/读”冲突,但是同样也避免了“读/读”冲突。 在读多写少的情况下,如果能够放宽加锁需求,允许多个执行读操作的线程同时访问数据结构,那么将提升程序的性能。只要每个线程都能确保读到最新的数据,并且在读取数据时不会有其他的线程修改数据,那么就不会发生问题。在这种情况下,就可以使用 读写锁 :一个资源可以被多个读操作访问,或者被一个写操作访问,但两者不能同时进行。 Java中读写锁的实现是 ReadWriteLock 。下面我们先介绍什么是读写锁,然后利用读写锁快速实现一个缓存,最后我们再来介绍读写锁的升级与降级。 回到目录 什么是读写锁 读写锁是一种性能优化措施,在读多写少场景下,能实现更高的并发性。读写锁的实现需要遵循以下三项基本原则: 允许多个线程同时读共享变量

Python基础-异常处理

徘徊边缘 提交于 2020-02-19 02:29:11
一 错误和异常 1.1 程序中难免出现错误,而错误分成两种 1.1 语法错误 #语法错误示范一 if #语法错误示范二 def test: pass #语法错误示范三 print(haha 1.2 逻辑错误 #用户输入不完整(比如输入为空)或者输入非法(输入不是数字) num=input(">>: ") int(num) #无法完成计算 res1=1/0 res2=1+'str' 1.2 什么是异常 异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下 1.3 python中的异常种类 l=['egon','aa'] l[3] IndexError dic={'name':'egon'} dic['age'] KeyError s='hello' int(s) ValueError 二 异常处理 2.1 什么是异常 异常发生之后, 异常之后的代码就不执行了 2.1 什么是异常处理 异常发生之后, 异常之后的代码就不执行了 python解释器检测到错误,触发异常(也允许程序员自己触发异常) 程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关) 如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理 2.2 为何要进行异常处理 python解析器去执行程序,检测到了一个错误时,触发异常

Java——异常和内部类

六月ゝ 毕业季﹏ 提交于 2020-02-18 23:23:39
异常 try{ 有可能出现异常的语句 ; }[catch (异常类型 异常对象) { } ... ] [finally { 异常的出口 }] try 代码块中放的是可能出现异常的代码; catch 代码块中放的是出现异常后的处理行为; finally 代码块中的代码用于处理善后工作, 永远都会在最后执行; 一般用于资源关闭; 建议return不要放在 finally 块中,因为可能会抑制try或者catch中的return; 其中 catch 和 finally 都可以根据情况选择加或者不加; 运行时异常 编译时异常 (受查异常):必须显式进行处理; Exception是异常类的父类; 自定义异常 需要自己定义一个类实现Exception; 在抛出的时候需要自己进行throws; 编译时期; 内部类 定义在类里面 实例内部类 静态内部类 匿名内部类 本地内部类 实例内部类 不能有静态的数据成员; eg: public class TestDemo3 { public int data1 = 10; public static int data2 = 20; //实例内部类 class InnerClass{ public int data1 = 100; public static int data2 = 300;//报错——》 } } 如何拿到内部类:外部类类名.内部类类名 =

常用分布式事务解决方案

半腔热情 提交于 2020-02-18 14:37:02
出处: https://github.com/clsaa/Distributed-Transaction-Notes 。 作者总结得很全面,做个笔记搬运。 一、 两阶段提交(2PC) 一个基于两阶段提交协议的分布式事务框架(LCN) 二阶段提交(Two-phaseCommit)是指,在计算机网络以及数据库领域内,为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种算法(Algorithm)。通常,二阶段提交也被称为是一种协议(Protocol))。在分布式系统中,每个节点虽然可以知晓自己的操作时成功或者失败,却无法知道其他节点的操作的成功或失败。当一个事务跨越多个节点时,为了保持事务的ACID特性,需要引入一个作为协调者的组件来统一掌控所有节点(称作参与者)的操作结果并最终指示这些节点是否要把操作结果进行真正的提交(比如将更新后的数据写入磁盘等等)。因此,二阶段提交的算法思路可以概括为:参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与者是否要提交操作还是中止操作。 所谓的两个阶段是指:第一阶段:准备阶段(投票阶段)和第二阶段:提交阶段(执行阶段)。 1. 准备阶段 事务协调者(事务管理器)给每个参与者(资源管理器)发送Prepare消息,每个参与者要么直接返回失败(如权限验证失败),要么在本地执行事务,写本地的redo和undo日志

分布式事务(理论+实战)

你离开我真会死。 提交于 2020-02-18 13:42:37
分布系统中,如何保证数据的一致性、原子性,分布式事务。分布式事务分为两大类,柔性事务、刚性事务。 一、方法论篇 分布式事务主要分为两部分,刚性事务和柔性事务。刚性事务主要针对DB层面,严格保证事务的原子性要么都成功,要么执行失败,全部回滚。 柔性事务,相对于刚性事务来的,为了保证DB的利用率,以及系统的吞吐量,不会长时间锁定DB资源,在事务执行失败之后不会进行回滚,而是采用补偿的方式保证数据的最终一致性,所以柔性事务又叫补偿型事务。先来介绍刚性事务。 1.1刚性事务 X/Open XA 协议, 最早的分布式事务模型是 X/Open 国际联盟提出的 X/Open Distributed Transaction Processing(DTP)模型,也就是大家常说的 X/Open XA 协议,简称XA 协议。 名词解释: 其中应用程序(Application Program ,简称AP):AP定义事务边界(定义事务开始和结束)并访问事务边界内的资源。 资源管理器(Resource Manager,简称RM):Rm管理计算机共享的资源,许多软件都可以去访问这些资源,资源包含比如数据库、文件系统、打印机服务器等。 事务管理器(Transaction Manager ,简称TM):负责管理全局事务,分配事务唯一标识,监控事务的执行进度,并负责事务的提交、回滚、失败恢复等。 操作过程 第一阶段

Java异常机制总结

时光总嘲笑我的痴心妄想 提交于 2020-02-17 17:32:21
异常机制概述: 异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。 异常的处理流程: 当程序中抛出一个异常后,程序从程序中导致异常的代码处跳出,java虚拟机检测寻找和try关键字匹配的处理该异常的catch块,如果找到,将控制权交到catch块中的代码,然后继续往下执行程序,try块中发生异常的代码不会被重新执行。如果没有找到处理该异常的catch块,在所有的finally块代码被执行和当前线程的所属的ThreadGroup的uncaughtException方法被调用后,遇到异常的当前线程被中止。 异常的体系结构: 异常的继承结构:Throwable为基类,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception。Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。 所有异常类型都是内置类Throwable的子类。因此,Throwable在异常类层次结构的顶层。紧接着Throwable下面的是两个把异常分成两个不同分支的子类。 一个分支是Exception(该类用于用户程序可能捕捉的异常情况

Java异常的深入研究与分析

自闭症网瘾萝莉.ら 提交于 2020-02-17 17:31:53
对于本文的内容,属于基础知识研究范畴,切勿以为读完此文就能将异常知识掌握到家。切记:操千曲而后晓声,观千剑而后识器,所以我觉得没有大量的源码阅读经验,你很难知道什么时候需要自定义异常,什么时候需要抛出异常。 异常机制概述 异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。 异常处理的流程 当程序中抛出一个异常后,程序从程序中导致异常的代码处跳出,java虚拟机检测寻找和try关键字匹配的处理该异常的catch块,如果找到,将控制权交到catch块中的代码,然后继续往下执行程序,try块中发生异常的代码不会被重新执行。如果没有找到处理该异常的catch块,在所有的finally块代码被执行和当前线程的所属的ThreadGroup的uncaughtException方法被调用后,遇到异常的当前线程被中止。 异常的结构 异常的继承结构:Throwable为基类,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception。Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。 Error异常 Error表示程序在运行期间出现了十分严重