社区
非技术区
帖子详情
Hashtable 问题 急
zy422
2007-07-01 09:41:25
当我从线程A里把 Key Val Add到 Hashtable tab 中后,在线程B却得不到值?
tab 为 static 静态的,
测试从 线程A里能取到值val
程序调试 在线程 B中 可以看到 tab里的val值和key
...全文
261
14
打赏
收藏
Hashtable 问题 急
当我从线程A里把 Key Val Add到 Hashtable tab 中后,在线程B却得不到值? tab 为 static 静态的, 测试从 线程A里能取到值val 程序调试 在线程 B中 可以看到 tab里的val值和key
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
GXY2005
2007-07-02
打赏
举报
回复
呵呵!
cnming
2007-07-02
打赏
举报
回复
写个最简单的先
static HashTable ht = new HashTable();
Thread th1,th2;
Form_Load(object sender, EventArgs e)
{
th1 = new Thread(new ThreadStart(this.InsertHash));
th1.Start();
th2 = new Thread(new ThreadStart(this.GetHash));
th2.Start();
}
private void InsertHash()
{
lock (ht)
{
for (int i = 0; i < 1000000; i++)
{
ht.Add(i, "string"+i);
}
}
}
private void GetHash()
{
lock (ht)
{
string s = ht[999999].ToString();
MessageBox.Show(s);
}
}
很明显,你在调用string s = ht[999999].ToString();的时候,ht[999999]没有建立的概率是90%以上
zy422
2007-07-01
打赏
举报
回复
找到问题了,原来是 GetMtserver(String ^servername )采用的编码不对
调试器里发现不了。
jiatong1981
2007-07-01
打赏
举报
回复
Hashtable^ synctab=Hashtable::Synchronized(connectiontable);
//这里错误
不知道你为何不直接操作当前的hashtable
jiatong1981
2007-07-01
打赏
举报
回复
当然这样用效率并不高
所以还需用Moniter类来完成
zy422
2007-07-01
打赏
举报
回复
很抱歉,我不是用C# 写的,是用 VC.NET 写的
static Hashtable ^connectiontable=gcnew Hashtable;
Server^ ServerCollection::GetMtserver(String ^servername )
{
pmut->WaitOne();
Server^ server=nullptr;
String ^key=gcnew String(servername);
Monitor::Enter(connectiontable);
server=(Server^)(connectiontable[key]);
Monitor::Exit(connectiontable);
pmut->ReleaseMutex();
return server;
}
void ServerCollection::AddMtserver(String ^servername ,Server ^value)
{
pmut->WaitOne();
String ^key=gcnew String(servername);
Hashtable^ synctab=Hashtable::Synchronized(connectiontable);
Monitor::Enter(connectiontable);
synctab->Add(key,value);
Monitor::Exit(connectiontable);
pmut->ReleaseMutex();
}
jiatong1981
2007-07-01
打赏
举报
回复
写个最简单的先
static HashTable ht = new HashTable();
Thread th1,th2;
Form_Load(object sender, EventArgs e)
{
th1 = new Thread(new ThreadStart(this.InsertHash));
th1.Start();
th2 = new Thread(new ThreadStart(this.GetHash));
th2.Start();
}
private void InsertHash()
{
lock (ht)
{
for (int i = 0; i < 1000000; i++)
{
ht.Add(i, "string"+i);
}
}
}
private void GetHash()
{
lock (ht)
{
string s = ht[999999].ToString();
MessageBox.Show(s);
}
}
jiatong1981
2007-07-01
打赏
举报
回复
代码贴出来看看
zy422
2007-07-01
打赏
举报
回复
已经试了 Monitor.Enter Monitor.Exit 还是不对
vicqqq
2007-07-01
打赏
举报
回复
up
blackant2
2007-07-01
打赏
举报
回复
支持cnming(cnming)
jiatong1981
2007-07-01
打赏
举报
回复
初步估计是你在操作时没有考虑多线程安全性
hashtable的有关多线程安全性 参看以下代码
Item item = null;
bool lockWasSuccessful = false;
while(true) {
lock(hashtable) {
item = hashtable[key];
lockWasSuccessful = Monitor.TryEntry(item);
}
if(lockWasSuccessful == false) {
Thread.Sleep(0);
continue;
}
// If we reach here, the item was successfully locked
try {
// Application code goes here
}
finally {
Monitor.Exit(item);
}
break;
}
cnming
2007-07-01
打赏
举报
回复
问题出在你的A、B线程不同步
可以使用Monitor来保证数据安全
http://blog.csdn.net/cnming/archive/2007/06/30/1672297.aspx
jiatong1981
2007-07-01
打赏
举报
回复
代码?
收集的常见的专业
问题
解决办法.rar
2009-02-24 08:31 61003 61003 常见的专业
问题
解决办法\Java容器类List、ArrayList、Vector及map、
HashTable
、HashMap的使用与区别.rar 2009-02-24 08:29 40960 13763 常见的专业
问题
解决办法\java容器类介绍.doc ...
JAVA初中级面试常问
hashtable
与 hashmap 的区别。
如果是
急
着找工作的话,一定要把这几点背出来。 1.
Hashtable
是个线程安全的类(HashMap线程不安全); 2.Hasbtable并不允许值和键为空(null),若为空,会抛空指针(HashMap可以); 3.
Hashtable
不允许键重复,...
集合HashMap、TreeMap、
HashTable
、LinkedHashMap
Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、
Hashtable
、LinkedHashMap和TreeMap,类继承关系如下图所示: 下面针对各个实现类的特点做一些说明: (1) ...
Java中 HashMap和
HashTable
区别
线程安全方面 HashMap线程不安全,效率高,自JDK1.2之后可以使用;...
HashTable
线程安全,效率低,自JDK1.0之后可以使用; 键值对空值相关 HashMap键值均可为null;
HashTable
键值均不可为null; ...
Hashtable
和 HashMap HashSet ConcurrentHashMap的区别
public class
Hashtable
extends Dictionary implements Map, Cloneable, java.io.Serializable HashMap extends AbstractMap implements Map, Cloneable, Serializable 他们都实现了Map 接
非技术区
7,776
社区成员
63,115
社区内容
发帖
与我相关
我的任务
非技术区
.NET技术 非技术区
复制链接
扫一扫
分享
社区描述
.NET技术 非技术区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章