1、ReentrantLock的lock和lockInterruptibly的区别??

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、反射相关代码

  1. ClassLoader loader = Thread.currentThread().getContextClassLoader();   
  2.         Class clazz = loader.loadClass("com.baobaotao.reflect.Car");   
  3.           
  4.           //②获取类的默认构造器对象并通过它实例化Car  
  5.         Constructor cons = clazz.getDeclaredConstructor((Class[])null);   
  6.         Car car = (Car)cons.newInstance();  
  7.           
  8.            
  9.           //③通过反射方法设置属性  
  10.         Method setBrand = clazz.getMethod("setBrand",String.class);          
  11.         setBrand.invoke(car,"红旗CA72");        
  12.         Method setColor = clazz.getMethod("setColor",String.class);  
  13.         setColor.invoke(car,"黑色");        
  14.         Method setMaxSpeed = clazz.getMethod("setMaxSpeed",int.class);  
  15.         setMaxSpeed.invoke(car,200);          
  16.         return car;  
9、数据库JDBC执行代码:
  1. Connection conn ;  
  2. try{  
  3.      conn = DriverManager.getConnection();//①获取数据连接  
  4.      conn.setAutoCommit(false); //②关闭自动提交的机制  
  5.      conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); //③设置事务隔离级别  
  6.   
  7.      Statement stmt = conn.createStatement();   
  8.       
  9.      int rows = stmt.executeUpdate( "INSERT INTO t_topic VALUES(1,’tom’) " );  
  10.      rows = stmt.executeUpdate( "UPDATE t_user set topic_nums = topic_nums +1 "+  
  11. "WHERE user_id = 1");   
  12.        
  13.      conn.commit();//④提交事务  
  14. }catch(Exception e){  
  15.      …  
  16.      conn.rollback();//⑤回滚事务  
  17. }finally{  
  18.    …  
  19. }  
10、ClassLoader和class.forname()都可以加载类,但是forname加载后会进行对静态变量和静态代码块进行初始化。

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>    覆盖引导类文件的位置



猜你喜欢

转载自blog.csdn.net/dhfzhishi/article/details/79183842
今日推荐