Каковы преимущества Блокирующейся Очереди в Java?

Sub solution1()    
    If Not sheet_exists("sheetnotfound") Then
        ThisWorkbook.Sheets.Add( _
                    After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)).Name = _
                    "sheetnotfound"
    End If    
End Sub


Function sheet_exists(strSheetName As String) As Boolean        
    Dim w As Excel.Worksheet
    On Error GoTo eHandle
    Set w = ThisWorkbook.Worksheets(strSheetName)
    sheet_exists = True

    Exit Function 
eHandle:
    sheet_exists = False
End Function
17
задан darrenp 14 October 2016 в 11:56
поделиться

2 ответа

Основным преимуществом является то, что BlockingQueue обеспечивает правильную, поточно-ориентированную реализацию. Разработчики сами реализовывали эту функцию в течение многих лет, но сделать это сложно. Теперь у среды выполнения есть реализация, разработанная, проверенная и поддерживаемая экспертами по параллелизму.

«Блокирующая» природа очереди имеет несколько преимуществ. Во-первых, при добавлении элементов, если емкость очереди ограничена, ограничивается и потребление памяти. Кроме того, если потребители очереди слишком далеко отстают от производителей, производители естественным образом ограничиваются, поскольку им приходится ждать, чтобы добавить элементы. При извлечении элементов из очереди главное преимущество - простота; вечное ожидание тривиально, а правильное ожидание указанного тайм-аута лишь немного сложнее.

27
ответ дан 30 November 2019 в 12:13
поделиться

Ключевой момент, который вы устраняете с помощью очереди блокировки, - это «опрос». Здесь вы говорите

. В этом случае 2-му потоку необходимо периодически проверять очередь на наличие информации.

Это может быть очень неэффективно - тратит много ненужного процессорного времени. Это также может привести к ненужным задержкам.

6
ответ дан 30 November 2019 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: