Предположим, у нас есть эти классы:блокировки каждого элемента в массиве с помощью Java
public class Record {
int key;
int value;
Record(){
this.key=0;
this.value=0;
}
Record(int key,int value){
this.key=key;
this.value=value;
}
public class Table {
static final Record[] table = new Record [100];
static final Object[] locks = new Object[table.length];
static{
for(int i = 0; i < table.length; i++) {
locks[i] = new Object();
}
table[0]=new Record(0,0);
table[1]=new Record(1,10);
table[2]=new Record(2,20);
table[3]=new Record(3,30);
}
}
И я хочу реализовать в классе Сделке этих методов
void setValueByID(int key, int value)
пары ключ-значение (запись) заблокирована (его нельзя прочитать/записать из других транзакций) до завершения метода setValueByID.
int getValueByID(int key)
ключ-значение пары (запись) не блокируется до сделки совершает
void commit()
он разблокирует все пары ключ-значение (записей) запертый в текущей транзакции
Итак, моя реализация такова:
class Transaction extends Thread {
//there is no problem here
public void setValueByID(int key, int value){
synchronized(Table.locks[key]) {
Table.table[key].key=key;
}
}
//the problem is here...
//how can i make other thread wait until current thread calls Commit()
public int getValueByID(int key){
int value=0;
synchronized(Table.locks[key]){
value= Table.table[key].key;
}
return value;
}
void commit(){
}
Ahmad
Большое спасибо ..... Вы не знаете, сколько вы мне помогли –
Просто я хочу задать вам дополнительный вопрос ... как я могу назвать многопоточность из класса Transaction? потому что вы не писали «класс Transaction extend Thread» {} –
извините за все эти вопросы ... но я действительно начинаю в потоковом ... если можно дать мне простой пример о том, как я могу создать отдельный поток и вызывают методы транзакции из него ... снова спасибо вам за помощь. –