다른 스레드에서 생성 한 바이트를 쓰는 리소스 (디스크의 파일)가 있다고 가정합니다. 이러한 스레드는 일부 이벤트를 수신하고 이벤트가 발생할 때마다 스레드를 생성하는 일부 프로세스에 의해 만들어집니다.리소스에 대한 동기화 된 액세스
synchronized void write(byte [] bytes) {
//write data to file
}
또는 일부 뮤텍스 생성 : 우리는 하나의 자원을 가지고, 우리는 작업을 쓰기 수행하는 클래스의 방법을 동기화해야 우리가 아주 오래된 하드 드라이브가 있다고 가정 지금
Object mutex = new Object();
void write(byte [] bytes) {
synchronized(mutex) {
//write data to file
}
}
을 그리고를, 그래서 너무 느리게 쓰기 작업을 수행합니다. 그리고 하루에 수 차례 우리는 매우 많은 양의 사건이 발생했습니다. 따라서 스레드는 자원에 대한 대기열과 같은 것을 만들 것입니다. 다음 질문이 있습니다.
- 대기열의 길이는 얼마나 될까요?
- 리소스와 리소스를 기다리는 스레드가 여러 개인 경우 은 리소스를 차지하는 첫 번째 스레드를 해제합니다. FIFO 원리일까요?
- 스레드의 우선 순위가 다른 경우 상황이 어떻게 바뀌나요?
- 리소스가 연결 풀링에 참여하는 개체를 생성하는
DataSource
개체 인 경우 위의 파일과 동일합니까?
당신은 스레드가 무작위로 자유 자원을 점유 할 것이라고 말하면 이런 상황에서 FIFO를 만드는 방법은 무엇입니까? 어떤 스레드 엔진에 대해 이야기하고 있습니까? – maks
내장 된 JVM 스레드 엔진. – 3martini
[QueuedSynchronizers] (http://download.oracle.com/javase/6/docs/api/java/util/concurrent/locks/AbstractQueuedSynchronizer.html)에서 FIFO와 같은 기능을 수행하십시오. 불행히도, 나는 결코 그 싱크로를 사용하지 않았다. 그래서 나는 우리가 말하는대로 그것을 배우고있다! – 3martini