java学习笔记分析 下载本文

内容发布更新时间 : 2025/2/15 7:25:20星期一 下面是文章的全部内容请认真阅读。

ConcurrentHashMap使用segment来分段和管理锁,segment继承自ReentrantLock,因此ConcurrentHashMap使用ReentrantLock来保证线程安全。

hashMap在单线程中使用大大提高效率,在多线程的情况下使用hashTable来确保安全。hashTable中使用synchronized关键字来实现安全机制,但是synchronized是对整张hash表进行锁定即让线程独享整张hash表,在安全同时造成了浪费。concurrentHashMap采用分段加锁的机制来确保安全

D:StringBuffer是线程安全的(同步),StringBuilder是不保证线程,(每次操作一次就是安全的)

E:Properties类是Hashtable的一个子类,hashTable是线程安全的,所以properotes是线程安全的

Arrays.asList方法返回的 这个List的实现类是java.util.Arrays.ArrayList这个类(而不是java.util.ArrayList)。

JDBC提供了Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程

依赖注入和控制反转是同一概念:

依赖注入和控制反转是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同。依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。

依赖注入的理念之一就是尽量减少各组件之间的相互依赖和制约。

方法的重写(override)两同两小一大原则: 方法名相同,参数类型相同

子类返回类型小于等于父类方法返回类型, 子类抛出异常小于等于父类方法抛出异常, 子类访问权限大于等于父类方法访问权限。

數組本身就是一個對象

java中内存区域分为4类:

栈内存空间,存放引用的堆内存空间的地址 堆内存空间,存放new出来的对象

全局数据区,保存static类型属性和全局变量

全局代码区,保存所有方法的定义

Ant和Maven都是基于Java的构建(build)工具。理论上来说,有些类似于(Unix)C中的make ,但没有make的缺陷。Ant是软件构建工具,Maven的定位是软件项目管理和理解工具。 Ant特点 ??

没有一个约定的目录结构 ??必须明确让ant做什么,什么时候做,然后编译,打包 ??没有生命周期,必须定义目标及其实现的任务序列 ??没有集成依赖管理 Maven特点 ??拥有约定,知道你的代码在哪里,放到哪里去 ??拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程 ??只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情 ??拥有依赖管理,仓库管理

idea maven spring+springmvc+mybatis 出现的错误

1、出现空指针异常 可能是在获取字节流时 类没有用getLoader方法获取 字节流 xml文件表的字段名和类中的属性名没做对应

2spring注解只有在启动服务器时才能使用

3 idea建的mavenweb.xml缺少头文件声明 无法使用EL表达式 需加上

4目前404问题还没解决

5 mybatis 出现null的问题

6 数据库要加异常处理 弄不好按钮没反应 /**

* 显示付款账号 */

var paramJson1={

'cstno':'PB10001017',

'accno':'62143928000382821',

'currentBusinessCode':'10200100', windowId:currentMVC.windowId }; $.ajax({

url:'findkidid.do', type:'post', data:paramJson1, dataType:'json',

async:false,

processResponse:function(data){ var alist=data.kidaccList;

var opString='

opString+='

$('#payAccount',currentElement).html(opString); } });

//创建存储过程

drop procedure if EXISTS pro_teacher;

create procedure pro_teacher(in id int,out message varchar(50)) BEGIN

set message=CONCAT(\END

、这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。 sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用了b的sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。

2、 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得敏感词线程可以使用同步控制块或者方法。

sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源敏感词线程可以占用CPU。一般wait不会加时间限制,因为如果wait线程的运行资源不够,再出来也没用,要等待敏感词线程调用notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。

Thread.Sleep(0)的作用是“触发操作系统立刻重新进行一次CPU竞争”。

3、使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用