try

007. J.U.C 之锁的使用

£可爱£侵袭症+ 提交于 2020-04-06 01:53:40
1. Lock API 1. Locks 包类层次结构 2. Lock 接口 方法签名 描述 void lock(); 获取锁(不死不休) boolean tryLock(); 获取锁(浅尝辄止) boolean tryLock(long time, TimeUnit unit) throws InterruptedException; 获取锁(过时不候) void lockInterruptibly() throws InterruptedException; 获取锁(任人摆布) void unlock(); 释放锁 Condition newCondition(); 结论: lock() 最常用,并且线程不会被中断; lockInterruptibly() 方法一般更昂贵,有的 impl 可能没有实现 lockInterruptibly(),只有真的需要效应中断时,才使用,使用之前看看 impl 对该方法的描述。 public class Demo1_GetLock { // 公平锁 // static Lock lock = new ReentrantLock(true); // 非公平锁 static Lock lock = new ReentrantLock(); public static void main(String[] args) throws

02-02-08、JDK8的语法糖

风流意气都作罢 提交于 2020-04-05 19:12:24
​1、什么是语法糖 如果要来进行一个拆字游戏的话,语法糖可以拆分成“语法” 和 “糖”,每一种计算机语言都有自己的语法,Java也不例外。 语法就是在这一个语言中,要表示一种行为的表示模式,如赋值:int i = 666;如循环while(foo){},语法在一种语言的运行环境中是原生支持的,是体现在其运行时当中的。 糖是则是一种对于吃它的人来说感觉到甜的碳水化合物,往其他食物中加入糖会让食物变甜,吃糖能让人愉悦。 语法糖(Syntactic Sugar)就是给语法裹上一层糖,因此语法糖也称语法糖衣,让使用这些被裹上糖的语法的编码人员感觉到“甜”。例如,Java中使用for循环语法对一个集合进行遍历,写法为: int [] collection = new int [ 6 ]; for ( int i = 0 ; i < collection.length; i++){ // do something } 而现在,你只需要这么写就行: int [] collection = new int [ 6 ]; for ( int i : collection){ // do something } 是否内心会感到小小的“甜”呢。 有人会感觉很奇怪,我就是这么写的啊,这不就是Java的语法么?还说是什么语法糖!呸!~ 我们都知道,Java是一门高级语言,它的运行环境JVM执行的是字节码

流的关联关系

隐身守侯 提交于 2020-04-05 18:13:39
更多应用案例: BufferedReader bufferedReader = new BufferedReader( new InputStreamReader( new FileInputStream( new File("C:\\Users\\86156\\Desktop\\HelloWorld.java") ))); BufferedWriter bWriter = new BufferedWriter( new OutputStreamWriter( new FileOutputStream( new File("C:\\Users\\86156\\Desktop\\HelloWorld_buffer2.txt")))); InputStreamReader inputStreamReader = new InputStreamReader( new FileInputStream( new File("C:\\Users\\86156\\Desktop\\HelloWorld.java") )); OutputStreamWriter outputStreamWriter = new OutputStreamWriter( new FileOutputStream( new File("C:\\Users\\86156\\Desktop\\HelloWorld_char

异常

被刻印的时光 ゝ 提交于 2020-04-05 17:29:34
异常: 在程序运行过程中,出现的不正常情况叫做异常。 在解决代码中可能出现的异常,要添加非常多的逻辑来进行判断,会使代码变得非常臃肿,不利于维护,因此,推荐大家使用异常处理机制来处理程序运行过程中出现的问题。 捕获异常:try、catch、finally 声明异常:throws 抛出异常:throw 获取错误信息:e.printStackTrace();(常用) e.getmessage();(不常用) finally块: 在程序运行过程中,如果处理异常的部分包含finally的处理,那么无论代码是否发生异常,finally中的代码总会执行。 finally中包含哪些处理逻辑? 1、IO流的关闭操作一般设置在finally中; 2、数据库的连接关闭操作一般设置在finally中; 面试中常问的问题: try..catch块中存在return语句,是否还执行finally块,如果执行,说出执行顺序? 情况一:try中有return,finally中没有 1 package com.test.ExceptionQuestion; 2 3 public class Demo { 4 public static void main(String[] args) { 5 System.out.println(test()); 6 } 7 8 public static int test(){

9.5 异常处理规则

自作多情 提交于 2020-04-05 17:12:15
目录 一、不要过度使用异常 二、不要使用过于庞大的try块 三、避免使用Catch All语句 四、不要忽略捕获到的异常 成功的异常处理应该实现如下4个目标 1、使程序代码混乱最小化 2、捕获并保留诊断信息 3、通知合适的人员 4、采用合适的方式结束异常活动 一、不要过度使用异常 过度使用异常主要有两个方面: 1、把异常和普通错误混淆在一起,不在编写任何错误处理代码,而是以简单地抛出异常来代替所有的错误处理。 2、使用异常处理代替流程控制。 对于完全已知的错误,应该编写处理这种错误的代码,增加程序的健壮性;对于普通错误,应该编写处理这种错误的代码,增加程序的健壮性。只有对于外部的、不能确定和预知的运行错误才使用异常。 比如五子棋游戏,处理用户输入坐标点已有棋子的两种方式: //如果用户试图下棋的坐标点已有棋子 if(!gb.board[xpos-1][ypos-1].quales("+")) { System.out.println("你输入的坐标点已有棋子了,请重新输入:"); continue; } 上面的处理方式检查用户试图下棋点已有棋子,立即打印一条提示语句,并重新开始下一次循环。这种处理方式简单明了,逻辑清晰。 如果将上面的机制改成如下方式: //如果用户试图下棋的坐标点已有棋子,程序自行抛出异常 if(!gb.board[xpos-1][ypos-1].quales("

技术大佬:我去,你竟然还在用 try–catch-finally

陌路散爱 提交于 2020-04-04 09:23:01
二哥,你之前那篇 我去 switch 的文章也特么太有趣了,读完后意犹未尽啊,要不要再写一篇啊?虽然用的是 Java 13 的语法,对旧版本不太友好。但谁能保证 Java 不会再来一次重大更新呢,就像 Java 8 那样,活生生地把 Java 6 拍死在了沙滩上。Java 8 是香,但早晚要升级,我挺你,二哥,别在乎那些反对的声音。 这是读者 Alice 上周特意给我发来的信息,真令我动容。的确,上次的“我去”阅读量杠杠的,几个大号都转载了,包括 CSDN,次条当天都 1.5 万阅读。但比如“还以为你有什么新特技,没想到用的是 Java 13”这类批评的声音也不在少数。 不过我的心一直很大。从我写第一篇文章至今,被喷的次数就好像头顶上茂密的发量一样,数也数不清。所以我决定再接再厉,带来新的一篇“我去”。 这次不用远程 review 了,因为我们公司也复工了。这次 review 的代码仍然是小王的,他编写的大部分代码都很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他没用 try-with-resources 时,还是忍不住破口大骂:“我擦,小王,你丫的竟然还在用 try–catch-finally!” 来看看小王写的代码吧。 public class Trycatchfinally { public static void main(String[] args) {

myBatis实例

不羁的心 提交于 2020-04-03 23:02:35
一.搭建环境, 建立数据库 1 CREATE TABLE user( 2 id int(11) not NULL AUTO_INCREMENT, 3 userName varchar(50) DEFAULT NULL, 4 userAge int(11) DEFAULT NULL, 5 userAddress varchar(200) DEFAULT NULL, 6 PRIMARY KEY(id) 7 )ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; 建立一个myBatis的java项目(不需要web项目) 然后倒入jar包 建总配置文件: 在src下建configration包.在建Configurations.xml文件 代码如下: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration PUBLIC " -//mybatis.org//DTD Config 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 4 <configuration> 5 <typeAliases> 6 <typeAlias type="com.user.User" alias="User"/> 7 <

常见数字证书类型

回眸只為那壹抹淺笑 提交于 2020-04-03 22:08:53
1 数字证书 1.1 概述   数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是 数字身份证 ,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名)。它是由权威机构——CA机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。 2 证书格式 2.1 证书格式分类 分为2大类:密钥库(含私钥,也可能有公钥)和公钥证书(仅含公钥) 2.1.1 密钥库文件格式【Keystore】 格式 : JKS 扩展名 : .jks/.ks 描述 : 【Java Keystore】密钥库的Java实现版本,provider为SUN 特点 : 密钥库和私钥用不同的密码进行保护 格式 : JCEKS 扩展名 : .jce 描述 : 【JCE Keystore】密钥库的JCE实现版本,provider为SUN JCE 特点 : 相对于JKS安全级别更高,保护Keystore私钥时采用TripleDES 格式 : PKCS12 扩展名 : .p12/.pfx 描述 : 【PKCS #12】个人信息交换语法标准 特点 : 1、包含私钥、公钥及其证书 2、密钥库和私钥用相同密码进行保护 格式 : BKS 扩展名 : .bks 描述 :

java操作数据库

烈酒焚心 提交于 2020-04-03 04:19:26
1 、 jdbc-odbc /** * 演示使用 jdbc-odbc 桥连方式操作数据库 *1 、配置数据源 ( 数据源:服务器 S ( . 或 local, 点小三角会死机) ) *2 、在程序中去连接数据源 * */ import java.sql.*; public class Demo { public static void main(String args[]) { Connection=null; Statement=null; try{ //1 、加载驱动 ( 作用是把需要的驱动程序加入内存 ) Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");// 该 jdbc 是 sun 公司开发的 //2 、得到连接 ( 指定连接到哪个数据源,用户名和密码 ) // 如果你配置数据源的时候,选择是 windows nt 验证,则不需要 "sa","shunping" // 即 Connection ct=DriverManager.getConnection("jdbc:odbc:mytext") Connection ct=DriverManager.getConnection("jdbc:odbc:mytext","sa","123456"); //3 、创建 Statement 或者 PreparedStatement[ 区别

C++多线程:std::unique_lock

与世无争的帅哥 提交于 2020-04-02 20:24:25
Member functions (constructor) Construct unique_lock (public member function ) (destructor) Destroy unique_lock (public member function ) Locking/unlocking lock Lock mutex (public member function ) try_lock Lock mutex if not locked (public member function ) try_lock_for Try to lock mutex during time span (public member function ) try_lock_until Try to lock mutex until time point (public member function ) unlock Unlock mutex (public member function ) Modifiers operator= Move-assign unique_lock (public member function ) swap Swap unique locks (public member function ) release Release mutex