可重入意味着在每个线程而不是每次调用的基础上获取锁.
由于线程持有内部锁,这不意味着线程运行一次等于调用基础吗?
谢谢,似乎意味着:在一个线程中,如果我lockA在doA调用函数的过程函数中得到一个锁doB,并且doB还需要一个锁lockA,那么就会有一个可重入.在Java中,每个线程都会获得这种现象,所以我不需要考虑死锁?
运行几个小时后,我的http服务器开始频繁主要的gc,但没有释放堆.
几次重大的GC以后,promotion failed和concurrent mode failure发生,然后堆被释放.我的gc日志如下:
{Heap before GC invocations=7172 (full 720):
par new generation total 737280K, used 667492K [0x000000076b800000, 0x000000079d800000, 0x000000079d800000)
eden space 655360K, 100% used [0x000000076b800000, 0x0000000793800000, 0x0000000793800000)
from space 81920K, 14% used [0x0000000793800000, 0x00000007943d91d0, 0x0000000798800000)
to space 81920K, 0% used [0x0000000798800000, 0x0000000798800000, 0x000000079d800000)
concurrent mark-sweep generation total 1482752K, used 1479471K [0x000000079d800000, 0x00000007f8000000, 0x00000007f8000000)
concurrent-mark-sweep perm gen total 131072K, used 58091K [0x00000007f8000000, 0x0000000800000000, 0x0000000800000000)
2015-11-19T21:50:02.692+0800: 113963.532: [GC2015-11-19T21:50:02.692+0800: 113963.532: [ParNew (promotion failed)
Desired survivor size 41943040 …Run Code Online (Sandbox Code Playgroud) 据说pipeline当set/getredis需要很多时,这是一个更好的方法,所以这是我的测试代码:
public class TestPipeline {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
JedisShardInfo si = new JedisShardInfo("127.0.0.1", 6379);
List<JedisShardInfo> list = new ArrayList<JedisShardInfo>();
list.add(si);
ShardedJedis jedis = new ShardedJedis(list);
long startTime = System.currentTimeMillis();
ShardedJedisPipeline pipeline = jedis.pipelined();
for (int i = 0; i < 100000; i++) {
Map<String, String> map = new HashMap<String, String>();
map.put("id", "" + i);
map.put("name", "lyj" + i);
pipeline.hmset("m" + i, map);
} …Run Code Online (Sandbox Code Playgroud) echo xx y11y rrr | awk '{ if ($2 ~/y[1-5]{2}y/) print $3}'
Run Code Online (Sandbox Code Playgroud)
为什么我无法获得任何输出?
谢谢.
用java思考说:
要从AbstractList创建只读List,必须实现get()和size().
它让我困惑,代码如下:
public class CountingIntegerList
extends AbstractList<Integer> {
private int size;
public CountingIntegerList(int size) {
this.size = size < 0 ? 0 : size;
}
public Integer get(int index) {
return Integer.valueOf(index);
}
public int size() { return size; }
public static void main(String[] args) {
List list = new CountingIntegerList(30);
}
}
Run Code Online (Sandbox Code Playgroud)
列表是只读列表吗?为什么?
好吧,答案是肯定的,因为我延伸AbstractList并抛出UnsupportedOperationExceptionif set或者and被调用.如果我想获得一个不可修改的List,Collections.unmodifiableList()是一个不错的选择.但请记住,它们都不是一成不变的:
List<StringBuilder> list = new ArrayList<StringBuilder>();
StringBuilder sb = new StringBuilder();
sb.append("hello");
list.add(sb);
System.out.println(list);
list …Run Code Online (Sandbox Code Playgroud)