由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 今天想通了一个java的问题
相关主题
有些面试官也是半桶水求问一道G家的题
Amazon一道synchronization的面试题bloomberg 第一轮电话面试 电经
[Job] Mechanical Engineer IV at Applied Materials (转载)问一道面试题
电面两题Trading Company Java developer求经验
关于java synchronized statement和static method or variablefacebook telephone interview from careercup
Java 面试题Google上收索leetcode的题,90%都是国人的blog链接
电话面试 - 是不是被阴了?A家面试题
感觉careercup上的mergesort很不简洁F电面
相关话题的讨论汇总
话题: sortedset话题: sorted话题: class话题: set话题: static
进入JobHunting版参与讨论
1 (共1页)
a**********0
发帖数: 422
1
以前有个问题 对于java.util.Collections 的某些methods比如
static SortedSet synchronizedSortedSet(SortedSet s)
Returns a synchronized (thread-safe) sorted set backed by the specified
sorted set.
static Collection unmodifiableCollection(Collection c)
Returns an unmodifiable view of the specified collection.
我当时不明白的是SortedSet 进入那个static factory method 出来怎么就变成
thread safe version了? 这肯定不是原来的SortedSet Class 而是一个新的class 它
在原始的SortedClass之上做了改动
今天看了一下effective java 解释了我的问题 其实static factory返回的class 是
private的 但是top level不可以declare private class 所以这些肯定是Collections
的 inner class 这样就可以把identifier变成private了 有人问private class如何
refer? 其实你看那些static factory method返回type都是interface 也就是说用
interface refer 就可以了 我觉得这样很高明 作为用户 根本意识不到这些private
inner class的存在
effective java也解释了为什么java有 java.util.Collection (这是个interface
) 和 java.util.Collections (这是个class) 原因是需要定义static (factory)
method 但是interface不可以含有method的implementation 所以搞了一个Collections
在结尾上多加一个字母s 这是个class 自己的constructor是private的 但是有大量的
inner class和static factory method. 我觉得我学了一招 以后自己也这么干
但是 这个解释有点老了 java1.8之后interface可以含有method的implementation 只
是需要 static或者default 也就是说可以在interface里边放static factory method了
另外如果需要serialize objects inner class不是很好的选择 因为会生成
intermediate construct
读书思考的小体会就是effective java需要逐字逐句的读 有可能解决以前的困惑哈
a****r
发帖数: 87
2
看你一下JDK implementation。
Class SynchronizedSortedSet implements SortedSet{
SynchronizedSortedSet(SortedSet s) {
super(s);
ss = s;
}
}
Basically, the original SortedSet is wrapped inside SynchronizedSortedSet.
It is not totally thread safe if you still have reference to the original
SortedSet.
a****r
发帖数: 87
3
javadoc
/**
* Returns a synchronized (thread-safe) sorted set backed by the
specified
* sorted set. In order to guarantee serial access, it is critical that
* all access to the backing sorted set is accomplished
* through the returned sorted set (or its views).


*
* It is imperative that the user manually synchronize on the returned
* sorted set when iterating over it or any of its subSet,
* headSet, or tailSet views.
*


* SortedSet s = Collections.synchronizedSortedSet(new TreeSet());
* ...
* synchronized (s) {
* Iterator i = s.iterator(); // Must be in the synchronized block
* while (i.hasNext())
* foo(i.next());
* }
*

* or:
*

* SortedSet s = Collections.synchronizedSortedSet(new TreeSet());
* SortedSet s2 = s.headSet(foo);
* ...
* synchronized (s) { // Note: s, not s2!!!
* Iterator i = s2.iterator(); // Must be in the synchronized block
* while (i.hasNext())
* foo(i.next());
* }
*

* Failure to follow this advice may result in non-deterministic
behavior.
*
*

The returned sorted set will be serializable if the specified
* sorted set is serializable.
*
* @param the class of the objects in the set
* @param s the sorted set to be "wrapped" in a synchronized sorted set.
* @return a synchronized view of the specified sorted set.
*/
public static SortedSet synchronizedSortedSet(SortedSet s) {
return new SynchronizedSortedSet<>(s);
}

j**********r
发帖数: 3798
4
For JDK, this is an afterthought wrapper. Design pattern wise, if you are
creating your own class, you can use a private constructor and only expose a
factory method, then it'd be threadsafe.
1 (共1页)
进入JobHunting版参与讨论
相关主题
F电面关于java synchronized statement和static method or variable
问一道面试设计题Java 面试题
Second round phone interview with eBay电话面试 - 是不是被阴了?
一个系统设计问题感觉careercup上的mergesort很不简洁
有些面试官也是半桶水求问一道G家的题
Amazon一道synchronization的面试题bloomberg 第一轮电话面试 电经
[Job] Mechanical Engineer IV at Applied Materials (转载)问一道面试题
电面两题Trading Company Java developer求经验
相关话题的讨论汇总
话题: sortedset话题: sorted话题: class话题: set话题: static