try

Java并发包中Lock的实现原理

浪尽此生 提交于 2020-01-30 01:12:55
Java并发包中Lock的实现原理 1. Lock 的简介及使用 Lock是java 1.5中引入的线程同步工具,它主要用于多线程下共享资源的控制。本质上Lock仅仅是一个接口(位于源码包中的java\util\concurrent\locks中),它包含以下方法 //尝试获取锁,获取成功则返回,否则阻塞当前线程 void lock(); //尝试获取锁,线程在成功获取锁之前被中断,则放弃获取锁,抛出异常 void lockInterruptibly() throws InterruptedException; //尝试获取锁,获取锁成功则返回true,否则返回false boolean tryLock(); //尝试获取锁,若在规定时间内获取到锁,则返回true,否则返回false,未获取锁之前被中断,则抛出异常 boolean tryLock(long time, TimeUnit unit) throws InterruptedException; //释放锁 void unlock(); //返回当前锁的条件变量,通过条件变量可以实现类似notify和wait的功能,一个锁可以有多个条件变量 Condition newCondition(); Lock有三个实现类,一个是ReentrantLock

Java常用工具——java异常

有些话、适合烂在心里 提交于 2020-01-29 15:29:26
package com.imooc.exception; import java.util.Scanner; public class TryCatchDemo1 { public static void main(String[] args) { // 要求输入两个数,输出两数之商 Scanner input=new Scanner(System.in); System.out.println("========运算开始=========="); try { System.out.println("请输入第一个整数:"); int one=input.nextInt(); System.out.println("请输入第二个整数:"); int two=input.nextInt(); System.out.println("one和two的商是:"+(one/two)); }catch(Exception e) { System.out.println("输入内容错误!"); } System.out.println("========运算结束=========="); } } 二、try-catch-finally 1、简单处理异常 2、打印出错信息 3、finally处理善后 package com.imooc.exception; import java.util

Java异常处理机制介绍

会有一股神秘感。 提交于 2020-01-29 13:51:58
摘要: 在Java中,常见的异常包括 error和exception类型。对于error类型的错误,JVM无法做出处理,遇到错误会程序停止执行。而exception是Java虚拟机中处理程序运行时的异常,运行过程中可能由于用户输入了不合法的参数或一些不符合要求的数据而抛出的异常。比如常见的除数不能为0 的ArithmaticException异常。异常和错误都继承自父类throwable接口。 异常指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。Java通 过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错误条件。当条件生成时,错误将引发异常。 异常的基本语法结构: try{ 可能发生异常的代码块 } catch(异常子类 变量){ } finally{ 一定会执行的语句 } 在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)。Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性。 Throwable: 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。 Error(错误

Android 获取进程CPU和内存数据

三世轮回 提交于 2020-01-29 07:21:34
文章目录 CPU数据 内存数据 方法一 方法二 CPU数据 读取/proc/[pid]/stat里的特定数值,然后进行计算就好了。关于/proc/[pid]/stat中具体每个数据的含义,请参考 linux-man7 private double getCPUInfo ( ) { double ret = 0.0 ; try 来源: CSDN 作者: Terie 链接: https://blog.csdn.net/Terie/article/details/103596101

课堂作业 异常与处理

☆樱花仙子☆ 提交于 2020-01-29 06:39:27
动手动脑: 1.请解释一下奇怪的现象: 代码执行时不发生异常。 jvm在处理浮点数时,生成的是ddiv字节码指令,i/0,0转化为浮点数0.0,而0.0是double类型的,并不精确,所以不会抛出异常。 jvm在处理整数时,生成的是idiv字节码指令,整数除0就是除0,会抛出异常。 2.多层的多层捕获 (1)catchwho.java 运行结果截图: (2)catchwho2.java 运行结果截图: (3)EmbedFinally.java 运行结果截图: 3. 总结try catch finally 1)try抛出一个异常之后,程序会跳出try,不再执行try后边的语句,开始对catch进行匹配,处理异常; 2)try嵌套中,抛出的异常只有被处理才可以按顺序抛出下一个异常,如果不处理,程序就终止; 3)try抛出异常之后,就跳出了try语句,内层catch无法捕获就继续向外抛,所以外层也就有异常,外层语句不执行,第二个程序 throw new ArithmeticExcepption没有执行。 4)第三个程序,try第一层第二层没有异常不用捕获,执行完之后到第三层,除0有异常,catch捕获,执行第三层的finally然后,顺序执行第二层,第一层的finally。 来源: https://www.cnblogs.com/gcc1828129658/p/7845732.html

JavaCore10版Ⅰ-捕获异常

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-29 06:06:41
【try..catch..finally 和try with resource】 一般操作文件流的时候,捕获异常通常会带finally,目的是保证流被关闭,防止内存泄漏,如下图,两种写法: 第1种:try和finally解耦(finally不在放在最后,而是在try里面执行完直接finally,保证最外层的try捕获到所有异常) 第2种:finally里面如果异常,则程序终止,尤其是所有流的关闭都放在finally里面时候,很容易内存泄漏,淡然可以在finally再次捕获 比如: ... } finally { in.close(); out.close();//上面in.close()异常了 那么out可能就未被执行关闭,从而造成内存泄漏 //为了防止上面问题,还需要对in和out再次捕获....代码老繁琐了!!!! } 对于上面两种写法,通过多次try..catch 总能捕获到所有异常,缺点就是代码繁琐,关闭N个流,try..catch..N次,好在Java7的时候增加了try with resource语句,解决了这一问题和之前的try..catch想比就是多了一对括号,括号里面用来定义你要最终处理的类 如下图: 注意事项: 1.多个变量时候,括号里面以分号“;”隔开 2. 必须是实现了AutoCloseable接口的类才能用此写法,Closeable也行

输入输出类

醉酒当歌 提交于 2020-01-29 04:27:01
import java.io.*; public class KeyboardInput{ private final BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); public final synchronized int readInteger(){ String input=""; int value=0; try{ input=in.readLine(); } catch (IOException e){} if(input!=null){ try{ value=Integer.parseInt(input); } catch(NumberFormatException e){} } return value; } public final synchronized long readLong(){ String input=""; long value=0L; try{ input=in.readLine(); } catch (IOException e){} if(input!=null){ try{ value=Long.parseLong(input); } catch(NumberFormatException e){} } return value; }

Lock wait timeout exceeded; try restarting transaction

ぐ巨炮叔叔 提交于 2020-01-29 01:29:37
针对以上问题 执行下面的Sql语句 INNODB_TRX表主要是包含了正在InnoDB引擎中执行的所有事务的信息,包括waiting for a lock和running的事务SELECT * FROM information_schema.INNODB_TRX; 出现下面的情况 执行下面Sql语句查询当前死锁的信息,经数据分析是由上面的 trx_mysql_thread_id =0的情况造成的。select * from performance_schema.data_locks;    如何删除 trx_mysql_thread_id =0的事务? 1)xa recover; //执行结果如下,包括formatID,gtrid_length, bqual_length,data_length2)xa rollback 'left(data,gtrid_length)','substr(data,gtrid_length+1,bqual_length)',formatID;例子:select left('14be7404-9897-4537-b169-213b73884238:275283',40); //14be7404-9897-4537-b169-213b73884238:275select substr('14be7404-9897-4537-b169

ReentrantLock(重入锁)功能详解和应用演示

て烟熏妆下的殇ゞ 提交于 2020-01-28 21:19:06
目录 1. ReentrantLock简介 2.ReentrantLock和synchronized的比较 2.1 相同点 2.2不同点 3.ReentrantLock相比synchronized的额外功能 3.1 ReentrantLock可以实现公平锁。 3.2 .ReentrantLock可响应中断 3.3 获取锁时限时等待 4.结合Condition实现等待通知机制 4.1 Condition使用简介 4.2 使用Condition实现简单的阻塞队列 5. 总结 一.ReentrantLock简介 jdk中独占锁的实现除了使用关键字synchronized外,还可以使用ReentrantLock。虽然在性能上ReentrantLock和synchronized没有什么区别,但ReentrantLock相比synchronized而言功能更加丰富,使用起来更为灵活,也更适合复杂的并发场景。 接口: Modifier and Type Method Description void lock() 获取锁 void lockInterruptibly() 除非当前线程被中断,否则获取锁定 Condition newCondition() 返回绑定到此Lock实例的新Condition实例 boolean tryLock() 只有在调用时它是空闲的才能获取锁 boolean

记账本开发记录——第十天(2020.1.28)

冷暖自知 提交于 2020-01-28 19:53:44
今天,简单学习了JDBC连接池的概念和自定义连接池。 所谓连接池,就是连接完后不close,而是归还到连接池内,可以解决数据库连接的性能问题。 对于自定义连接池,我们可以自己创建连接池,然后通过这个连接池进行连接。如下代码: 1 public class MyDataSource implements DataSource{ 2 // 创建一个List集合用于存放多个连接对象. 3 private List<Connection> list = new ArrayList<Connection>(); 4 // 在程序开始的时候,初始化几个连接,将连接存放到list中. 5 public MyDataSource() { 6 // 初始化3个连接: 7 for(int i=1;i<=3;i++){ 8 Connection conn = JDBCUtils.getConnection(); 9 list.add(conn); 10 } 11 } 12 13 @Override 14 // 获得连接的方法: 15 public Connection getConnection() throws SQLException { 16 if(list.size() <= 0){ 17 for(int i=1;i<=3;i++){ 18 Connection conn = JDBCUtils