потокобезопасность hashtable - PullRequest
       0

потокобезопасность hashtable

0 голосов
/ 11 августа 2011

У меня есть HashTable.

Теперь, поскольку хеш-таблица является поточно-ориентированной, поэтому всякий раз, когда я добавляю что-то в список в хеш-таблице, также безопасен для протектора?

например

if hmp is my map

 hmp.get(0).add(something)

 hmp.get(0).remove(0)

Эти операции безопасны для потока?

Ответы [ 2 ]

4 голосов
/ 11 августа 2011

Нет, абсолютно нет.Потоковая безопасность отдельных операций над хеш-таблицей не влияет на поточную безопасность того, что вы положили в хеш-таблицу.Поэтому, если вы поместите ссылку ArrayList<T> в хеш-таблицу, например, это не будет потокобезопасным, поэтому вы не должны использовать его из нескольких потоков без синхронизации, если какой-либо из этих потоков будет изменять данные.

0 голосов
/ 30 марта 2017
   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());
        }
      }
   } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...