У меня есть цикл while в методе. В этом цикле while есть много блоков if. Если у меня есть 2 потока, обращающихся к одному в цикле одновременно, как остановить один уникальный блок if одновременно. Должен ли я импортировать какую-либо вещь?Строки 2-го потока, которые доступны одному из блоков в java
while (true){
if (condition){
if (statement 1){//}
else if (statement){//} //I want only one thread to access this block at a time
else if (statement2){//}
else{//}
}
else if condition1){
if (statement 1){//}
else if (statement){//} //I want only one thread to access this block at a time
else if (statement2){//}
else{//}
}
}
else if (condition 2){
if (statement 1){//}
else if (statement){//} //I want only one thread to access this block at a time
else if (statement2){//}
else{//}
}
}
else{
if (statement 1){//}
else if (statement){//} //I want only one thread to access this block at a time
else if (statement2){//}
else{//}
}
}
Используйте [ 'synchronized' блок] (https://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html) –
Подсказка: так много каскадом, если/иначе, являются четким признаком плохой дизайн. Подумайте о том, чтобы изучить хорошую книгу, такую как «Чистый код» Роберта Мартина, если вы заинтересованы в ударе по качеству своего кода! Я гарантирую вам: такая сложная условная логика, в сочетании с многопоточным ... взорвет ваш ум. Вы можете потратить часы, пытаясь исправить это, но получится ... не быть. Серьезно: ** сначала ** упростить свой код, а затем добавить многопоточную часть. Выполнение этого в обратном порядке означает, что вы будете тратить в 5, 10 раз больше времени, чем следовало бы. – GhostCat
Действительно верно! спасибо, направляя меня! Я хочу получить от вас больше рекомендаций! большое спасибо! – eagle