Просто чтобы прояснить: когда вы вызываете код с помощью .start()
(с многопоточностью), вы получаете исключение, а когда вы меняете threadAO.start()
на threadAO.run()
(без многопоточности), он работает правильно?
Возможно, oisAO
не синхронизируется между потоками: исходный поток изменяет состояние oisAO (закрывает сокет), прежде чем новый поток, созданный .start()
, сможет выполнить свою работу.Чтобы определить, является ли это проблемой, вы можете попробовать добавить threadAO.join()
(приостановить текущий поток, пока новый поток не будет завершен) сразу после threadAO.start()
.
Если это проблема, вам следует больше подумать, чтобы найти правильное решение, поскольку простое приостановление работы исходного потока может привести к проблемам с производительностью.Если вы приостанавливаете поток, он не является многопоточным, а представляет собой просто код, выполняющийся в двух потоках последовательно.