저는 현재 작업중인 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) { ... }
}
: 아마 위의 방법 중 일부는 createIncident 또는 updatePerson라고하더라도 언급해야
, 그들 모두 만 httprequests을하기 위해선, 모든 메소드 내부의 코드는 일반적으로 동일 중요한 사소한 차이는 제외. 내 코드의 다른 부분에서는 스레드를 사용하여 이러한 메서드를 호출합니다. 그 부분은 내가 요구 한 부분입니다. 이러한 스레드는 이러한 메서드를 호출하므로 getData를 호출하는 스레드 B는 스레드 A가 postPhoto의 일부가 될 때까지 기다려야합니다.
대부분의 대기열 뒤에있는 아이디어는 생산자와 소비자 작업을 동시에 허용하는 것입니다. 이 경우 요청을 직렬화하지만 "생산자"는 "소비자"가 바쁠 때 차단됩니다. –
@ 피터 (Peter)가 말한 바를 명확히하기 위해서 : 코드는 기본적으로 멀티 스레드가 아니며, 이는 아마도 당신이 원하는 것이 아닙니다. 확실히 안전하게 동기화되지만 멀티 코어 하드웨어의 단일 코어에 해당하는 성능 만 가질 수 있습니다. – toto2
나는 분명히 할 것입니다. 나는 원래의 질문에서 중요한 정보를 남겼다고 생각한다. – Josh