Java知识整理

来源:互联网 发布:安卓微信虚拟聊天软件 编辑:程序博客网 时间:2024/06/05 20:23

对Java中易混淆的知识点进行整理,一方面有利于面试,一方面有利于自己对于Java更深的了解。

  • Comparable vs Comparator

    一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。
    Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
    1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
    2、可以使用多种排序标准,比如升序、降序等

    Comparable需要改变对象,然后直接sort即可。静态绑定。
    Comparator不需要改变对象,可以作为参数传递给sort即可,可扩展性比较强。算法和数据分离,是一个良好的设计,是一种“动态绑定排序”。

  • set集合如何保证对象不重复

    Set集合不允许有重复出现的对象,且最终的判断是根据equals()的

  • for循环删除集合陷阱。

    可以使用迭代器进行集合的删除。

  • HashTable vs ConcurrentHashMap

    HashTable 锁住的对象的整体。
    ConcurrentHashMap锁住的时对象的部分,基于lock操作的,这样的目的是保证同步的时候,锁住的不是整个对象。事实ConcurrentHashMap可以满足concurrentLevel个线程并发无阻塞的操作集合对象

  • 为何需要多线程

    多线程是为了提高cpu的利用率,cpu速度和IO速度不你呢个匹配,木桶原理导致,所以有了多线程的概念。cpu需要等待IO操作。。

  • volatile

    基本数据类型除了long、double(64bit,分32bit存储),其他都是原子操作。不存在线程安全问题。volatile声明的变量,不会将变量更新到缓存中,而会直接更新到共享内存中。由此实现线程安全,内存可见性。

  • Semaphore(信号量)

    设置一个对资源的最大量。类似于多把锁机制。

  • ThreadLocal

    • ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
    • 锁是一种以时间换空间的机制,而ThreadLocal正好是以空间换时间的。
    • ThreadLocal只解决线程安全的问题,并不能解决线程同步的问题。所以它与锁可以说是没有什么关系的,彼此各有所长,不能代替。ThreadLocal解决的是同一个线程内的资源共享问题,而synchronized 解决的是多个线程间的资源共享问题

后续更新。。。。

0 0
原创粉丝点击