Я реализую карту поиска клиентов, где использую ConcurrentHashamp.
private ConcurrentHashMap<String,SignupDTO> map = new <String,SignupDTO> ConcurrentHashMap();*
public SignupDTO get(String opcode)
{
return this.map.get(opcode);
}
public void set(String opcode,SignupDTO dto)
{
this.map.put(opcode, dto);
}
Здесь получите и установите функцию, вызываемую из нескольких потоков, для обновления и получения информации о клиенте. У меня есть другая функция update(), которая вызывается из определенного потока через определенное время и обновляет карту обновленной информацией о клиенте.
public void update()
{
Connection connection = null;
Statement stmt = null;
ResultSet rs = null;
try
{
connection = DatabaseManager.getInstance().getConnection();
stmt = connection.createStatement();
String sql= "select * from client";
rs = stmt.executeQuery(sql);
while (rs.next())
{
SignupDTO row = new SignupDTO();
......
..........
this.map.put(key, row);
}
}
}
операция получения и установки на карте будет потокобезопасной или нет? пожалуйста, помогите мне.
"foo"=1
и"bar"=2
. Методupdate
считывает"foo"=3
и"bar"=4
из базы данных и выполняет обновления. Затем другой поток может прочитать"foo"=3
, а затем"bar"=2
. Это в принципе самое худшее, что может случиться. - person nosid   schedule 16.06.2014