Является сокетом Java ориентированный на многопотоковое исполнение PrintWriter?

Вам не нужны a, b и c в ELSE

Sub Button1_Click()

Dim ws As Worksheet
Dim a As String
Dim b As String
Dim c As String
Dim URL As String

'Lockout Functions
   'Cancel = True

'Check for Muted Sound, Unmute

'First Question
    a = Application.InputBox("What is 1+1?")
    If a = "2" Then 'continue
    Else
    Application.Speech.Speak "Are you even trying?"
    MsgBox "Hi, you got that answer wrong"
    End If

'Second Question
    b = Application.InputBox("Finish this Sequence 1123_813__")
    If b = "1123581321" Then 'Continue
    Else
    Application.Speech.Speak "It's the Fibonacci duh!"
    MsgBox "Hi, you got that answer wrong"
    End If  

'Third Question
    c = Application.InputBox("What are the next three numbers 1, 4, 9, 16, ?")
    If c = "1,4,9,16,25,36,49" Then 'continue
    Else
    Application.Speech.Speak "Terrible!"
    MsgBox "Hi, you got that answer wrong"
    End If

'Unlock/Return Control
    'Cancel = False

End Sub
9
задан Alex 3 April 2009 в 14:53
поделиться

2 ответа

Это - плохой дизайн, чтобы иметь их несколько PrintWriters на том же потоке. Действительно Вы хотите, по крайней мере, объект, называет их, чтобы синхронизироваться (или заключенный поток).

Однако принятие по некоторым причинам Вас действительно хочет несколько PrintWriters:

Первая проблема: Writers не используют this как блокировка. PrintWriter и BufferedWriter по умолчанию оба используют Writer они создаются с как блокировка. Это, очевидно, полностью повреждается. Они должны использовать Writerблокировка, не Writer самостоятельно. Легкая ошибка, учитывая, что, имея блокировку функции Object удаляет статическую безопасность типов. Таким образом, необходимо будет создать a PrintWriter с сокетом OutputStream (или некоторый другой общий объект) как блокировка.

Во-вторых, у нас есть буферизация в PrintWriter. Так приезжайте конец буфера, половина записана, и половина ожидают следующей записи. Для предотвращения этого любой внешне блокирует для объединения a print и flush, или используйте автосбрасывание и добавьте символ новой строки.

Так, это не значительно ориентировано на многопотоковое исполнение, но можно взломать его. Или можно использовать лучший дизайн.

11
ответ дан 4 December 2019 в 13:49
поделиться

Вам нужен способ использовать то же PrintWriter между потоками (t1.writer == t2.writer, не просто PrintWriters созданный из того же OutputStream). С тем же PrintWriter, все операции записи синхронизируются.

4
ответ дан 4 December 2019 в 13:49
поделиться
Другие вопросы по тегам:

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