Shi*_*oft 2 java serialization rmi thread-safety concurrenthashmap
我有一个使用RMI的类传送.但我不确定那些线程安全的对象是否可以序列化.以前有人试过吗?
更新 skaffman说是的,但我没有序列化.
这是我传送的课程.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package net.shisoft.beans;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
/**
*
* @author Shisoft
*/
public class WhatzNewList {
ConcurrentHashMap<String, CopyOnWriteArrayList<WhatzNewEntry>> WhatzNewTable = new ConcurrentHashMap<String, CopyOnWriteArrayList<WhatzNewEntry>>();
String user;
public ConcurrentHashMap<String, CopyOnWriteArrayList<WhatzNewEntry>> getWhatzNewTable() {
return WhatzNewTable;
}
public void setWhatzNewTable(ConcurrentHashMap<String, CopyOnWriteArrayList<WhatzNewEntry>> WhatzNewTable) {
this.WhatzNewTable = WhatzNewTable;
}
public String getUser() {
return user;
}
public void setUser(String usere) {
this.user = usere;
}
public WhatzNewList(String user) {
this.user = user;
}
}
Run Code Online (Sandbox Code Playgroud)
这是班级 WhatzNewEntry
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package net.shisoft.beans;
import java.util.Date;
/**
*
* @author Shisoft
*/
public class WhatzNewEntry {
String Title;
String context;
String contact;
Date Time;
public Date getTime() {
return Time;
}
public void setTime(Date Time) {
this.Time = Time;
}
public String getTitle() {
return Title;
}
public void setTitle(String Title) {
this.Title = Title;
}
public String getContact() {
return contact;
}
public void setContact(String contact) {
this.contact = contact;
}
public String getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
}
Run Code Online (Sandbox Code Playgroud)
可能是斯卡弗是对的,但这里有什么不对?
小智 5
ConcurrentHashMaps(CHM)是无法有效序列化的重量级对象.例如.为什么要序列化所有锁定信息?
转换为HashMap,Map,Set甚至toString()等中间对象要高效得多.
最有效的当然是根本不使用默认的Serializable行为,而是编写自己的Externalizable接口,它可以完全控制缓冲区内容.
例如. - 这是一个序列化的空CHM:
¬ísr&java.util.concurrent.ConcurrentHashMapd™Þ‡)= I segmentMaskI segmentShift [segmentst 1 [Ljava/util/concurrent/ConcurrentHashMap $ Segment; xp ur 1 [Ljava.util.concurrent.ConcurrentHashMap $ Segment; Rw?A2> 9t xp sr .java.util.concurrent.ConcurrentHashMap $ Segment6LX")= F loadFactorxr(java.util.concurrent.locks.ReentrantLockfU¨,,ÈjëLsynct/Ljava/util/concurrent/locks/ReentrantLock $ Sync; xpsr 4java. util.concurrent.locks.ReentrantLock $NonfairSynce2çS{¿xr -java.util.concurrent.locks.ReentrantLock $Sync¸¢"ªDZ| xr5java.util.concurrent.locks.AbstractQueuedSynchronizerfU¨Cu?RãIstatexr6java.util.concurrent .locks.AbstractOwnableSynchronizer3߯¹mo©xp?@ sq~sq~?@ sq~sq~?@ sq~sq~?@ sq~sq~?@ sq~sq~?@ sq~sq~?@ sq~square~ ?@ sq~sq~?@ sq~sq~?@ sq~sq~?@ sq~sq~?@ sq~sq~?@ sq~sq~?@ sq~sq~?@ sq~sq〜?@ PPX
毛.这是从toString()序列化的相同CHM:
’t{}
通过一些转换工作,您可以节省大量带宽!
| 归档时间: |
|
| 查看次数: |
2274 次 |
| 最近记录: |