我有一个HashTable。
现在哈希表是线程安全的,所以每当我在哈希表中添加一些东西时也会安全吗?
例如
if hmp is my map
hmp.get(0).add(something)
hmp.get(0).remove(0)
这些操作是否安全?
答案 0 :(得分:4)
ArrayList<T>
引用放入哈希表,例如,那不是线程安全的,那么如果这些线程中的任何一个线程将修改数据,则不应在没有同步的情况下从多个线程中使用它。
答案 1 :(得分:-2)
package legacyCLasses;
import java.util.*;
public class HashTable_With_Enumeration implements Runnable
{
Hashtable<Integer,String> htobj=new Hashtable<Integer,String>();
static int count=1;
public void run()
{
this.htobj.put(10,"ABC");
this.htobj.put(200,"PQR");
this.htobj.put(1,"JKL");
this.dis();
}
void dis()
{
try
{
Enumeration<String> eobj=this.htobj.elements();
while(eobj.hasMoreElements())
{
System.out.print(eobj.nextElement());
if(count%2!=0)
{
System.out.print("\t\t\t\t");
count++;
}
else
{
System.out.println();
count++;
}
Thread.sleep(2000);
}
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
public static void main(String[] args)
{
HashTable_With_Enumeration heobj1=new HashTable_With_Enumeration();
HashTable_With_Enumeration heobj2=new HashTable_With_Enumeration();
Thread t=new Thread(heobj1,"HashTable_Thread1");
Thread t2=new Thread(heobj2,"HashTable_Thread2");
try
{
System.out.print("\n"+t.getName()+" Values \t"+t2.getName()+ "Values
\n");
t.start();
Thread.sleep(500);
t2.start();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}