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是个带优先级的队列。
5
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>());
9
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的情况下,有可能溢出。
}
. . .
}
相关推荐
Java和C++在细节上的差异(一) 一、基本程序设计结构 二、对象与类 三、继承 Java和C++在细节上的差异(二) 四、枚举 五、反射 Java和C++在细节上的差异(三) 六、接口与内部类 七、异常和断言 Java和C++...
电子书相关:包含4个有关JAVA线程的电子书(几乎涵盖全部有关线程的书籍) ...第六章 Java线程调度 第七章 Java线程调度例子 第八章 和同步相关的高级主题 第九章 多处理器机器上的并行化 第十章 线程组
第1章 Java语言 1 1.1 Java语言简介 1 1.1.1 Java语言的问世 1 1.1.2 Java语言的组成 1 1.2 开发环境的安装 3 1.3 一个简单的Java应用程序 4 1.3.1 Java应用程序示例 4 1.3.2 使用Java核心API文档 7...
编写Java程序,贪心猪游戏,一个简单的两人掷色子游戏,先达到或者超过100分的玩家获胜。玩家轮流进行游戏,每次掷出一个六面色字。 如果玩家掷出1,不得分并换人。 如果玩家掷出2-6,就可以选择:再掷一次,或...
6.恰恰是告诉我们用抽象构建框架,用实现扩展细节的注意事项而已:单一职责原则告诉我们实现类要职责单一;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;接口隔离原则告诉我们在设计...
第六章 常用类的使用 117 基本数据类型的包装类 117 包装类基本知识 117 包装类的用途 118 自动装箱和拆箱?autoboxing,unboxing 119 字符串相关类(String、 StringBuffer 、 StringBuilder) 120 String类的常用...
第六章 Java线程调度 线程调度概述 何时调度是重要的 调度和线程优先级 常见的调度实现 本地调度支持 其他线程调度方法 总结 第七章 Java线程调度例子 线程池 循环调度 作业调度 总结 第八章 和同步相关的高级...
有java2实用教程各章节的学习笔记,和章节的重点以及细节都包括,是一位老师的总结。
掌握最新的语言细节,包括Java 8的变化;使用基本的Java句法学习面向对象编程。仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
一、Java基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入...
AIC的学费很贵,半年18000元,大家看看他们教些什么内容吧 <br>他们学校的网址http://www.aicsws-sjtu.com/<br><br>此内容是Java第1到第六章的PPT,希望大家喜欢 <br>如果大家觉得好我继续发 <br>课程定位...
一些Java细节 设计性事务处理 铭记要点 小结 第21章 开发EJB客户机 引言 EJBs的客户机 小结 第22章 开发可扩缩的EJB应用程序 引言 Enterprise JavaBeans的优点 EJB的广阔开放空间...
注释详尽:为了让学习者更好地理解代码逻辑和实现细节,源码中的关键部分都附有详尽的中文注释,降低学习门槛。 模块化设计:源码采用模块化的设计思想,结构清晰、易于扩展,方便用户根据自己的需求进行定制和修改...
抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性...
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了...
...................................................6 六、系统展示 .......................................... .............7 七、实验小结 .......................................... .............9 Rain...