`

java细节(六)

    博客分类:
  • java
 
阅读更多

1 java.util.concurrent.locks.Lock  5.0

boolean tryLock()尝试获得锁而没有发生阻塞;若成功返回真。

 

2 若是很多线程从一个数据结构读取数据而很少线程修改其中数据的话,读写锁是很有用的。它允许读者线程共享访问,当然写线程依然必须互斥访问。

下面是一个读写锁的必要步骤:

构造一个ReentrantReadWriteLock对象:

private ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();

抽取读锁和写锁:

private Lock readLock = rwl.readLock();

private Lock writeLock = rwl.writeLock();

对所有访问者加读锁:

public double getTotalBalance()

{

   readLock.lock();

   try { . . . } 

   finally { readLock.unlock(); }

}

对所有的修改者加写锁:

public void transfer(. . .)

{

   writeLock.lock();

   try { . . . } 

   finally { writeLock.unlock(); }

 

3 java.util.concurrent.locks.ReentrantReadWriteLock  5.0

 Lock readLock()得到一个可以被多个读操作共用的读锁,但会排斥所有的写操作。

Lock writeLock()得到一个写锁,排斥其他所有的读写操作。

 

4 对于许多问题,可以通过一个或多个队列以优雅且安全的方式将其形式化。

ArrayBlockingQueue需要指定容量;LinkedBlockingQueue不需要指定容量;LinkedBlockingDeque是一个双端版本;PriorityBlockingQueue是个带优先级的队列。

 

java.util.concurrent.BlockingQueue<E>  5.0

void put(E element)添加元素,必要时阻塞。

E take()移除并返回头元素,必要时阻塞。

boolean offer(E element, long time, TimeUnit unit)添加元素,并返回true;若队列满,则返回false

E poll(long time, TimeUnit unit)移除并返回头元素,若对列为空,则返回null

 

6 java.util.concurrent 包提供了映像,有序集和队列的高效实现:ConcurrentHashMap, ConcurrentSkipListMap , ConcurrentSkipListSet , 和ConcurrentLinkedQueue 。这些集合允许并发地访问数据结构的不同部分来使竞争极小化。

 

7 java.util.concurrent.ConcurrentLinkedQueue<E>

 ConcurrentLinkedQueue<E>() 构造一个可以被多线程安全访问的无边界非阻塞的队列。

 

 java.util.concurrent.ConcurrentHashMap<K, V>

 ConcurrentHashMap<K, V>()

ConcurrentHashMap<K, V>(int initialCapacity)

ConcurrentHashMap<K, V>(int initialCapacity, float loadFactor, int concurrencyLevel)

构造一个可以被多线程安全访问的散列映像表。

V putIfAbsent(K key, V value) 若是该键没有在映像表中出现,则将给定的值和值关联起来,并返回null。否则返回与该键关联的现有值。

boolean remove(K key, V value)若给定的值同给定的键关联,删除给定的键与值并返回真,否则返回false。

boolean replace(K key, V oldValue, V newValue) 若给定的值同oldValue关联,用它与newValue关联,否则返回false。

 

8 任何集合类通过使用同步包装器变成线程安全的:

List<E> synchArrayList = Collections.synchronizedList(new ArrayList<E>());

Map<K, V> synchHashMap = Collections.synchronizedMap(new HashMap<K, V>());

 

java.util.concurrent.Executors  5.0

ExecutorService newCachedThreadPool() 返回一个带缓存的线程池,在必要时创建新线程;空闲线程会被保留60秒

ExecutorService newFixedThreadPool(int threads)返回一个线程池,该池中的线程数由参数指定。

ExecutorService newSingleThreadExecutor() 返回一个执行器,它在一个单个的线程中依次执行各个任务。

 

java.util.concurrent.ExecutorService 5.0

Future<T> submit(Callable<T> task)

Future<T> submit(Runnable task, T result)

Future<?> submit(Runnable task)

提交指定的任务去执行。

void shutdown()关闭服务,会先完成已经提交的任务而不再接收新的任务。

 

10 

java.util.concurrent.Executors  5.0

ScheduledExecutorService newScheduledThreadPool(int threads)用于预定执行,返回一个线程池。

ScheduledExecutorService newSingleThreadScheduledExecutor()用于预定执行,返回一个执行器。

 

java.util.concurrent.ScheduledExecutorService 5.0

 ScheduledFuture<V> schedule(Callable<V> task, long time, TimeUnit unit)

ScheduledFuture<?> schedule(Runnable task, long time, TimeUnit unit)

预定在指定的时间之后执行任务。

 

ScheduledFuture<?> scheduleWithFixedDelay(Runnable task, long initialDelay, long delay, TimeUnit unit)

预定在初始的延迟结束后,周期性的运行给定的任务,周期长度是delay

 

11 java.util.Collection<E> 1.2 

Iterator<E> iterator()返回一个用于访问集合中每个元素的迭代器。

int size() 返回当前存储在集合中的元素的个数。

boolean isEmpty()若为空,返回true

boolean contains(Object obj)若包含一个与obj相等的对象,返回true。

boolean containsAll(Collection<?> other)若这个集合包含other中的所有元素,返回true。

 

boolean add(Object element)将一个元素添加到这个集合,若这个调用改变了集合,返回true。

boolean addAll(Collection<? extends E> other) 添加一个集合

boolean remove(Object obj)删除一个元素

boolean removeAll(Collection<?> other)删除other中的所有元素。以上4个方法,若是改变了集合,返回true。

void clear()删除所有元素。

boolean retainAll(Collection<?> other)从这个集合中删除所有与other集合中的元素不同的元素。

Object[] toArray()返回这个集合的对象数组。

 

12 java.util.Iterator<E>  1.2

 boolean hasNext()若存在可访问的元素,返回true。

 E next()返回将要访问的下一个对象。

void remove()删除上次访问的对象,这个方法必须紧跟在访问一个元素之后执行。

 

13

ArrayList 一种可以动态增长和缩减的索引序列

LinkedList 一种可以在任何位置进行高效地插入和删除操作的有序序列。

ArrayDeque 一种用循环数组实现的双端队列。

HashSet 一种没有重复元素的无序集合。

TreeSet 一种有序集。

EnumSet一种包含枚举类型值的集。

LinkedHashSet 一种可以记住插入次序的集。

PriorityQueue 一种允许高效删除最小元素的集合。

HashMap 一种存储键/值关联的数据结构。

TreeMap 一种键值有序排列的映射表。

LinkedHashMap 一种记住键值添加次序的映射表。

 

14 java.util.List<E>  1.2

ListIterator<E> listIterator()

ListIterator<E> listIterator(int index)

void add(int i, E element)

void addAll(int i, Collection<? extends E> elements)

E remove(int i) 删除给定位置的元素并返回这个元素。

E get(int i)

E set(int i, E element)

int indexOf(Object element)

int lastIndexOf(Object element)

 

15 java.util.ListIterator<E> 1.2

void add(E newElement)

void set(E newElement)

boolean hasPrevious()

E previous()

int nextIndex()

int previousIndex()

 

16 Vector类的所有方法都是同步的,而ArrayList方法不是同步的。

17 具有不同数据域的对象将产生不同的散列码。注意,自己实现的hashCode方法应该与equals方法兼容,即如果a.equals(b)为true,a与b必须具有相同的散列码。

 

18 HashSet的构造方法

java.util.HashSet<E> 1.2

HashSet()

HashSet(Collection<? extends E> elements)

HashSet(int initialCapacity)

HashSet(int initialCapacity, float loadFactor)

 

19 java.lang.Object 1.0 

int hashCode()返回这个对象的散列码。散列码可以是任何整数,包括正数或负数。

 

20 对象的比较

public interface Comparable<T>

{

   int compareTo(T other);

}

若a与b相等,调用a.compareTo(b)一定返回0;若排序后a在b的前面,则返回负值;若a在b后,则返回正值。具体返回什么值都不重要,关键是符号。

例:

 class Item implements Comparable<Item>

   {  

      public int compareTo(Item other)

      {   

         return partNumber - other.partNumber;//注:x-y的情况下,有可能溢出。

      }

      . . .

   }

分享到:
评论

相关推荐

    Java2实用教程第六版课后习题答案答案

    Java2实用教程第六版是Java编程学习的经典教材之一,它为初学者提供了全面而深入的Java语言知识。这本书的课后习题旨在帮助读者巩固所学的概念,提高编程能力。本资源是该教程第六版的课后习题答案,对于正在自学...

    java2实用教程

    5.3 数组的初始化:讲解了静态和动态初始化数组的细节。 5.4 字符串:详细说明了字符串的操作,包括获取字符串长度、比较、检索、截取、替换、转换为数值以及数值转换为字符串等。 5.5 对象的字符串表示:介绍了...

    java笔记(细节问题讲的很细)

    这份"java笔记(细节问题讲的很细)"很可能包含了Java语言的核心概念、类库使用、编程技巧以及常见问题的解决方案。 一、Java基础 1. 变量与数据类型:Java提供了八种基本数据类型,包括整型、浮点型、字符型和...

    疯狂java讲义06 电子版 pdf

    虽然Java引用和C语言指针在功能上相似,都用于间接访问内存中的对象,但Java隐藏了内存地址的具体细节,使得开发者在使用时不必直接操作内存地址,减少了内存泄露等低级错误的发生。Java的引用类型更接近于面向对象...

    Java程序设计基础篇(第8版)第六章编程题答案

    3. **封装**:封装是Java中重要的一部分,通过private关键字隐藏内部实现细节。题目可能要求实现一个具有私有字段但提供公有接口访问的类。 4. **多态**:多态性允许我们使用父类引用指向子类对象,编程题可能会...

    JAVAOOP六到十章课后上机答案

    本压缩包包含了Java OOP六到十章课后上机作业的答案,旨在帮助学习者巩固和深化对这些章节的理解。 第六章通常涉及到的是类和对象的基本概念。在这个阶段,你会学习如何定义类,创建对象,并理解类与对象之间的关系...

    21天学通JAVA第六天

    4. **封装**:封装是将数据和操作数据的方法绑定在一起,对外界隐藏内部细节,提供公共接口来访问。在Java中,通过访问修饰符(public, private, protected等)来控制成员变量和方法的可见性。 面向对象编程与面向...

    《Java基础入门(第3版)》(Java):课后答案-docx文档

    封装是隐藏对象的属性和实现细节,只对外提供公共访问方式;继承允许子类继承父类的属性和方法,实现代码复用;多态则是允许不同类的对象对同一消息作出不同的响应,增强程序的灵活性。 第一章介绍了Java的基础概念...

    java语言程序设计基础篇第六版二三章答案

    Java语言程序设计基础篇第六版的第二章和第三章主要涵盖了Java编程的基础概念和技术,是初学者进入Java世界的关键步骤。下面将详细讲解这两个章节的知识点。 第二章:Java编程环境与基本语法 1. **Java开发工具**...

    Java and the Java Virtual Machine.pdf

    《Java与Java虚拟机》一书深入探讨了Java语言和JVM的关键概念和技术细节,对于Java开发者、系统架构师以及对软件工程感兴趣的读者来说是一本宝贵的参考资料。通过学习本书,读者不仅可以深入了解Java语言和JVM的工作...

    java 技术总结.--java 技术

    封装允许我们将数据和操作数据的方法封装在一个类中,隐藏实现细节;继承使得子类可以继承父类的属性和方法,实现代码复用;多态则允许同一种行为在不同对象上有不同的表现形式,增强了程序的灵活性。 三、异常处理...

    线程 JAVA java线程 java线程第3版 java线程第2版第3版合集

    电子书相关:包含4个有关JAVA线程的电子书(几乎涵盖全部有关线程的书籍) ...第六章 Java线程调度 第七章 Java线程调度例子 第八章 和同步相关的高级主题 第九章 多处理器机器上的并行化 第十章 线程组

    Java基础入门源代码

    封装隐藏了对象的内部实现细节;继承允许一个类(子类)从另一个类(父类)继承属性和方法;多态则让不同类的对象可以使用同名的方法,实现不同的行为。 4. **异常处理**:Java中的异常处理是通过try-catch-finally...

    基于java的六级单词PK小游戏源码.7z

    标题中的“基于java的六级单词PK小游戏源码.7z”表明这是一个使用Java编程语言开发的项目,目的是为了帮助用户通过游戏的方式学习和测试英语六级词汇。这个压缩包包含的是游戏的源代码,意味着我们可以看到整个项目...

    Java监听键盘鼠标全局事件[定义].pdf

    Java监听键盘鼠标全局事件 Java监听键盘鼠标全局事件是指使用Java语言来监听和处理键盘和鼠标...该技术需要深入了解Java Native Interface、Windows Hook机制、线程和同步等技术细节,以便正确地实现事件监听和处理。

    西农java实习报告,并且有代码

    "java第六次"可能涵盖了Java的集合框架,如ArrayList、LinkedList、HashMap等,以及它们在实际编程中的应用。 至于"java第七次"和"java第八次",没有具体的细节,但根据通常的学习路径,可能涵盖了多线程编程,包括...

    JavaCV-ffmpeg-6大JAR包.zip

    在"JavaCV-ffmpeg-6大JAR包.zip"这个压缩包中,包含了JavaCV与FFmpeg集成的关键组件,以下是这六大JAR包的简要介绍: 1. **javacv.jar**: 这是JavaCV的主要库文件,提供了对其他计算机视觉库的Java封装,包括OpenCV...

    java六大必须澄清的概念-常考题目

    以下是六个Java中必须澄清的关键概念,这些也是面试中的常考题目。 1. **对象和类**: Java中的所有数据都封装在对象中,而对象是由类定义的。类是对象的模板,描述了对象的属性和行为。创建对象的过程称为实例化...

    The Java Language Specification, Java SE 11 Edition.rar

    《Java语言规范,Java SE ...以上只是《Java语言规范,Java SE 11版》的部分内容概述,实际规范中包含的细节远超于此。对于Java开发者来说,深入理解这份规范能够提升编程技能,避免常见错误,确保代码的质量和兼容性。

Global site tag (gtag.js) - Google Analytics