1、ReentrantLock的lock和lockInterruptibly的区别??
ReentrantLock的中断和非中断加锁模式的区别在于:线程尝试获取锁操作失败后,在等待过程中,如果该线程被其他线程中断了,它是如何响应中断请求的。lock方法会忽略中断请求,继续获取锁直到成功,然后再取消;而lockInterruptibly则直接抛出中断异常来立即响应中断,由上层调用者处理中断。
那么,为什么要分为这两种模式呢?这两种加锁方式分别适用于什么场合呢?根据它们的实现语义来理解,我认为lock()适用于锁获取操作不受中断影响的情况,此时可以忽略中断请求正常执行加锁操作,因为该操作仅仅记录了中断状态(通过Thread.currentThread().interrupt()操作,只是恢复了中断状态为true,并没有对中断进行响应)。如果要求被中断线程不能参与锁的竞争操作,则此时应该使用lockInterruptibly方法,一旦检测到中断请求,立即返回不再参与锁的竞争并且取消锁获取操作(即finally中的cancelAcquire操作)。
2、final修饰的方法:最终的方法,该方法不能被子类覆盖 ;注意:子类可以调用,但是不能覆盖。
3 、Java是自右向左逐一赋值的,比如:A=B=C=0,首先给C赋值0,即C=0,然后B=C;最后A=B。
4、volatile的数组只针对数组的引用具有volatile的语义,而不是它的元素
5、数组是放在堆空间的。
6、hashmap的Entry节点
7、当梦想与现实出现激烈碰撞时,是选择梦想还是安于现状。
8、反射相关代码
- ClassLoader loader = Thread.currentThread().getContextClassLoader();
- Class clazz = loader.loadClass("com.baobaotao.reflect.Car");
- //②获取类的默认构造器对象并通过它实例化Car
- Constructor cons = clazz.getDeclaredConstructor((Class[])null);
- Car car = (Car)cons.newInstance();
- //③通过反射方法设置属性
- Method setBrand = clazz.getMethod("setBrand",String.class);
- setBrand.invoke(car,"红旗CA72");
- Method setColor = clazz.getMethod("setColor",String.class);
- setColor.invoke(car,"黑色");
- Method setMaxSpeed = clazz.getMethod("setMaxSpeed",int.class);
- setMaxSpeed.invoke(car,200);
- return car;
- Connection conn ;
- try{
- conn = DriverManager.getConnection();//①获取数据连接
- conn.setAutoCommit(false); //②关闭自动提交的机制
- conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); //③设置事务隔离级别
- Statement stmt = conn.createStatement();
- int rows = stmt.executeUpdate( "INSERT INTO t_topic VALUES(1,’tom’) " );
- rows = stmt.executeUpdate( "UPDATE t_user set topic_nums = topic_nums +1 "+
- "WHERE user_id = 1");
- conn.commit();//④提交事务
- }catch(Exception e){
- …
- conn.rollback();//⑤回滚事务
- }finally{
- …
- }
java命令模式执行
java XXX 是运行的当前目录带完整包路径的Java类,如果类用有包路径要通过javac 编译时带包路径。
javac -d . <srcFile>
javac 的 -d参数用于指定生成class文件的位置,.(点号)表示当前目录。
Javap -v -p -l xxx/xxx.class #带包路径
javap命令参数
C:\>javap -help
用法: javap <options> <classes>
其中, 可能的选项包括:
-help --help -? 输出此用法消息
-version 版本信息
-v -verbose 输出附加信息
-l 输出行号和本地变量表
-public 仅显示公共类和成员
-protected 显示受保护的/公共类和成员
-package 显示程序包/受保护的/公共类
和成员 (默认)
-p -private 显示所有类和成员
-c 对代码进行反汇编
-s 输出内部类型签名
-sysinfo 显示正在处理的类的
系统信息 (路径, 大小, 日期, MD5 散列)
-constants 显示静态最终常量
-classpath <path> 指定查找用户类文件的位置
-bootclasspath <path> 覆盖引导类文件的位置