Разница в поведении между виртуальными потоками и классическими потоками относительно «синхронизации»?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Разница в поведении между виртуальными потоками и классическими потоками относительно «синхронизации»?

Сообщение Anonymous »

Многие проекты с открытым исходным кодом пытаются уйти от использования Synchronized из-за его поведения с виртуальным потоком.
Что касается виртуальных потоков, я понимаю, что внутри блока Synchronized, в ситуациях, когда происходит сетевое соединение (которое обычно паркует поток) или файловый ввод-вывод, поток-носитель в идеале должен быть передан другому потоку, но он остается «закрепленным». Правильно ли я понимаю?
Иная ли ситуация с традиционной многопоточностью на основе ThreadPool? В случаях, когда асинхронная обработка происходит внутри синхронизированного блока, можно ли правильно передать поток-носитель другому потоку?
Кроме того, возникает ли аналогичная проблема в процессе получения блокировки для выполнения синхронизированного блока? Другими словами, когда другой поток выполняет синхронизированный блок, а виртуальный поток ожидает, остается ли он закрепленным до тех пор, пока блокировка не будет снята?
Мои вопросы можно резюмировать следующим образом:
public void someMethod() {
// Does Virtual Thread get pinned here, too?
synchronized(this) {
someIOMethods() // Virtual Thread gets 'pinned' here, right? How about classical ThreadPools?
}
}
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»