syx103
syx103
悲观锁:在每次线程对共享数据资源进行处理时,总是认为会出现并发修改,即有其他线程也在对此共享资源数据进行修改。每次在进行共享数据修改时要先获得相应的锁,才能对其进行修改。使用此种锁机制的时候,当一个线程在对共享数据行进修改时,其他线程都进入等待,只有通知当前运行完毕,其他线程需要通过不断地争夺执行权,等待,直到获取到执行权为止。 乐观锁:总是认为在进行共享资源数据改动时,不会出现有其他线程同时修改的情况,但是当存入内存,进行保存的时候,需要判断是否再保存数据之前对数据进行了修改。即当不同线程对数据进行修改时,可同时进行修改,但是保存时要改动相应的版本号,以证明此数据已被修改,如果在修改之前和修改之后的版本号不同时,则需要重新对数据进行修改,直到保存成功
抽象类中有构造法方法,接口中没有构造方法 抽象类中的成员变量可以为任意类型,而接口中的成员变量只能为静态常量 抽象类中可以含有静态方法,接口中没有静态方法 抽象类可以被继承,子类可以不必完全实现其抽象方法,如果子类没有完全实现其抽象方法,子类也为抽象类,子类实现接口必须实现全部的抽象方法 抽象类中的抽象方法可以用public ,protected修饰,但接口中的抽象方法只能用public修饰
两者都是将等待线程中的线程调动至锁池,竞争锁对象,获得执行权,notify()是将等待池中的任意一个调至锁池,与锁池中的其他线程争夺锁对象,notifyAll()是将等待池中的全部线程调至锁池中。前者一般适用于仅有一个线程有效执行的情况,后者一般作用在全部。
List和Set都实现了Collection接口,Map是一个单独的接口 List 存放有序(怎么存入,怎么取出),允许存入重复元素,可以出现多个NULL值。 Set存放无序,不允许存入重复元素,只能存有一个NULL值,是基于Map实现的,底层存储使用hashcode(),我们不能操作他的位置, Map是一个单独的接口,以键值对的形式存放数据,键值不允许重复,数值存放可以重复,一个键必须对应一个值,
equals()方法比较的是对象的内存地址,而一般我们使用此方法意在比较两对象的在逻辑上是否相等,而不是两者的地址值,通常比较对象各个属性值是否相等,属性完全相等时在存储时,认为是一个对象,而hashcode有这样的规定:两个对象相等,hashCode一定相等。hashcode不等,两个对象一定不等。默认的hashcode 根据内存地址经过哈希算法实现的。比较两个对象,当重写的equals()计算两个对象完全相等,而两个对象的内存地址不相同,则计算得到的hashcode值不相等,出现矛盾。因此必须重写hashcode方法。