Синхронизированное просто означает, что несколько потоков, если они связаны с одним объектом, могут предотвратить загрязнение чтения и записи, если на конкретном объекте используется синхронизированный блок. Чтобы дать вам больше ясности, давайте возьмем пример:
class MyRunnable implements Runnable {
int var = 10;
@Override
public void run() {
call();
}
public void call() {
synchronized (this) {
for (int i = 0; i < 4; i++) {
var++;
System.out.println("Current Thread " + Thread.currentThread().getName() + " var value "+var);
}
}
}
}
public class MutlipleThreadsRunnable {
public static void main(String[] args) {
MyRunnable runnable1 = new MyRunnable();
MyRunnable runnable2 = new MyRunnable();
Thread t1 = new Thread(runnable1);
t1.setName("Thread -1");
Thread t2 = new Thread(runnable2);
t2.setName("Thread -2");
Thread t3 = new Thread(runnable1);
t3.setName("Thread -3");
t1.start();
t2.start();
t3.start();
}
}
Мы создали два объекта класса MyRunnable, runnable1 - совместно с потоком 1 и потоком 3 & amp; runnable2 используется только для потока 2. Теперь, когда t1 и t3 запускаются без использования синхронизации, вывод PFB, который предполагает, что оба потока 1 и 3 одновременно влияют на значение var, где для потока 2, var имеет свою собственную память.
Without Synchronized keyword
Current Thread Thread -1 var value 11
Current Thread Thread -2 var value 11
Current Thread Thread -2 var value 12
Current Thread Thread -2 var value 13
Current Thread Thread -2 var value 14
Current Thread Thread -1 var value 12
Current Thread Thread -3 var value 13
Current Thread Thread -3 var value 15
Current Thread Thread -1 var value 14
Current Thread Thread -1 var value 17
Current Thread Thread -3 var value 16
Current Thread Thread -3 var value 18
Использование Synchronzied, thread 3 ожидание завершения потока 1 во всех сценариях. Имеются две блокировки: одна на runnable1, совместно используемая нитью 1 и потоком 3, а другая на runnable2, совместно используемая только потоком.
Current Thread Thread -1 var value 11
Current Thread Thread -2 var value 11
Current Thread Thread -1 var value 12
Current Thread Thread -2 var value 12
Current Thread Thread -1 var value 13
Current Thread Thread -2 var value 13
Current Thread Thread -1 var value 14
Current Thread Thread -2 var value 14
Current Thread Thread -3 var value 15
Current Thread Thread -3 var value 16
Current Thread Thread -3 var value 17
Current Thread Thread -3 var value 18
Если это происходит во время обратной передачи, то в Вашем < % % Page > директива можно добавить следующее:
MaintainScrollPositionOnPostback="true"
Это было добавлено в.NET 2.0 и добавляет некоторый JavaScript к странице, чтобы гарантировать, что страница прокручивает вниз назад к управлению, которое вызвало обратную передачу.
Работы обработка.
Я нашел другое решение. Если у Вас есть GridView в контейнере отделения с возможностью прокрутки, я рекомендую это: Сохраняют Позицию Прокрутки DIV
Это перезагружает целую страницу после выбора строк? Если так, попытайтесь поместить GridView в UpdatePanel, так, чтобы событие было отправлено на сервер, на самом деле не перезагружая целую страницу.