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
Основным преимуществом является то, что BlockingQueue
обеспечивает правильную, поточно-ориентированную реализацию. Разработчики сами реализовывали эту функцию в течение многих лет, но сделать это сложно. Теперь у среды выполнения есть реализация, разработанная, проверенная и поддерживаемая экспертами по параллелизму.
«Блокирующая» природа очереди имеет несколько преимуществ. Во-первых, при добавлении элементов, если емкость очереди ограничена, ограничивается и потребление памяти. Кроме того, если потребители очереди слишком далеко отстают от производителей, производители естественным образом ограничиваются, поскольку им приходится ждать, чтобы добавить элементы. При извлечении элементов из очереди главное преимущество - простота; вечное ожидание тривиально, а правильное ожидание указанного тайм-аута лишь немного сложнее.
Ключевой момент, который вы устраняете с помощью очереди блокировки, - это «опрос». Здесь вы говорите
. В этом случае 2-му потоку необходимо периодически проверять очередь на наличие информации.
Это может быть очень неэффективно - тратит много ненужного процессорного времени. Это также может привести к ненужным задержкам.