我需要安排一些将来要完成的工作.我可以用两种方式做到:
创建TimerTask
并执行timer.schedule(...);
用途Executors.newScheduledThreadPool(1)
:
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
ScheduledFuture <?> scheduleHandle = scheduler.schedule(pushExternalRunnable,
runScheduleDate.getTime() - now.getTime(), TimeUnit.MILLISECONDS);
Run Code Online (Sandbox Code Playgroud)这两种方式在未来安排工作有什么区别?
假设您有一个带有重写的equals,hashCode和clone方法的键类(KeyClass).假设它有2个原始字段,一个String(名称)和一个int(id).
现在你定义
KeyClass keyOriginal, keyCopy, keyClone;
keyOriginal = new KeyClass("original", 1);
keyCopy = new KeyClass("original", 1);
keyClone = KeyClass.clone();
Run Code Online (Sandbox Code Playgroud)
现在
keyOriginal.hashCode() == keyCopy.hashCode() == keyClone.hashCode()
keyOriginal.equals(keyCopy) == true
keyCopy.equals(keyClone) == true
Run Code Online (Sandbox Code Playgroud)
因此,就HashMap而言,keyOriginal,keyCopy和keyClone是无法区分的.
现在,如果您使用keyOriginal将条目放入HashMap,则可以使用keyCopy或keyClone将其检索回来,即
map.put(keyOriginal, valueOriginal);
map.get(keyCopy) will return valueOriginal
map.get(keyClone) will return valueOriginal
Run Code Online (Sandbox Code Playgroud)
此外,如果在将密钥放入地图后改变密钥,则无法检索原始值.所以对于例如
keyOriginal.name = "mutated";
keyOriginal.id = 1000;
Now map.get(keyOriginal) will return null
Run Code Online (Sandbox Code Playgroud)
当你说map.keySet()时,它将返回地图中的所有键.HashMap类如何知道地图中存储的键,值和条目的完整列表?
编辑 所以我理解它,我认为它的工作原理是将Entry键作为最终变量.
static class Entry<K,V> implements Map.Entry<K,V> {
final K key;
Run Code Online (Sandbox Code Playgroud)
(docjar.com/html/api/java/util/HashMap.java.html).因此,即使我在将其放入地图后改变了密钥,也会保留原始密钥.我的理解是否正确?但即使保留原始密钥引用,仍然可以改变其内容.因此,如果内容发生变异,并且K,V仍然存储在原始位置,那么检索如何工作?
如果在放入hashmap后改变键,EDIT检索将失败.因此,不建议您使用可变的hashmap键.
简单的Async servlet和Comet/Bayeux协议有什么区别?
我正在尝试实现一种"服务器推送"(或"反向Ajax")类型的网页,当服务器上发生事件时,该网页将从服务器接收更新.因此,即使没有客户端明确发送请求,我也需要服务器能够将响应发送到特定的客户端浏览器.
据我所知,Comet是这类技术的总称.'Bayeux'是协议.但是,当我查看servlet规范时,即使是"异步servlet"似乎也完成了同样的事情.我的意思是我可以定义一个简单的servlet
<async-supported>
Run Code Online (Sandbox Code Playgroud)
web.xml中的属性设置为true; 并且该servlet将能够异步地向客户端发送响应.然后我可以有一个基于jQuery或ExtJS的ajax客户端,只是一直在做
long_polling()
Run Code Online (Sandbox Code Playgroud)
调用servlet.类似于以下链接中描述的内容 http://www.ibm.com/developerworks/web/library/wa-reverseajax1/index.html#long
所以我的问题是:
简单的Async servlet和Comet/Bayeux协议有什么区别?
谢谢
java ×2
bayeux ×1
comet ×1
futuretask ×1
hashmap ×1
reverse-ajax ×1
server-push ×1
servlet-3.0 ×1
timer ×1