Я делаю несколько веб-запросов из приложения Android, над которым я работаю. Я хочу, чтобы все эти запросы обрабатывались по очереди в порядке их поступления, делает ли мой код ниже?Понимание синхронизации и реализации очереди
Способ, которым я читаю и понимаю синхронизированный, - это то, что из всех потоков, которые я выделяю, может быть только один из следующих методов за один раз. Например, если пользователь пытается postPhoto в одном потоке, а затем сразу getData в другом потоке, поток getData должен будет дождаться завершения потока postPhoto до того, как он начнет получать данные. Поскольку все мои веб-запросы проходят через этот класс, и все методы синхронизированы, это означает, что они по существу поставлены в очередь правильно?
public class Controller {
public synchronized static String getData(String url, String limit) { ... }
public synchronized static String postPhoto(String filepath, int server_id) { ... }
public synchronized static InputStream getPhoto(String thumbnailPath) { ... }
public synchronized static String createIncident(String name, String description) { ... }
public synchronized static String updatePerson() { ... }
synchronized static boolean verifyConnection(String response) { ... }
}
EDIT:
я, вероятно, следовало бы отметить, что, хотя некоторые из перечисленных выше методов называют createIncident или updatePerson, все они только делают httprequests, код внутри все методы, как правило, то же самое за исключением важных незначительных вариаций. В других частях моего кода я выделяю потоки, чтобы называть эти методы, и это та часть, о которой я просил. Поскольку эти потоки называют эти методы, поток B, вызывающий getData, должен будет ждать, пока поток A не завершит его часть postPhoto.
Идея, стоящая перед большинством очередей, заключается в том, чтобы позволить производителю и потребителю работать одновременно. В этом случае вы будете сериализовать свои запросы, но ваши «производители» заблокируют, когда «потребитель» занят. –
Просто, чтобы уточнить, что сказал @Peter: ваш код в основном не многопоточен, как есть, что, вероятно, не то, что вы хотите. Это, безусловно, безопасно синхронизировано, но настолько, что вы можете иметь только производительность, соответствующую одному ядру на многоядерном оборудовании. – toto2
Я собираюсь уточнить. Я думаю, что я оставил важную информацию из оригинального вопроса. – Josh