0

분자 알고리즘을 시뮬레이션하기 위해 Java로 프로그램을 작성하고 있습니다. 분자 알고리즘은 본질적으로 병행 성을 사용하기 때문에 (화학 물질과 농도를 공급하는 한 필요한만큼 화학 반응을 할 수 있습니다), 동시성을 사용해야합니다.스레드 내 Threadsafe?

그러나 최근 그래프 구조에 사용하고있는 패키지가 스레드 안전하지 않다는 것을 알게되었습니다. 각 스레드에 대해 그래프의 ArrayList를 설정했습니다. 계산하는 동안 스레드가 자체 ArrayList 및 그 안에있는 그래프 중 일부를 수정하지만, 하나의 스레드가 다른 스레드의 ArrayList 또는 그래프를 수정할 수 있도록하는 코드가 없습니다. 자식 스레드에서 두 개의 ArrayList를 수신 할 때까지는 마찬가지입니다.

이 작업을 수행하려면 ForkJoinPool을 사용하고 있습니다.이 문제에 대한 이해는 제게 잘못되었습니다. 두 스레드간에 작업을 나눌 두 스레드 사이에서 작업을 나눌 수 있습니다. 잎 스레드에서 계산이 수행되면 부모 스레드로 돌아가며 루트 자식이 반환 할 때까지 계속하고 ForkJoinTask 인 경우 루트가 결과를 반환합니다.

말할 것도없이, 필자가 원하는 것은 worksteeling이다. 따라서, 만약 worksteeling과 자식 스레드가 부모 스레드로 돌아가는 것을 제외하고, 어떤 스레드도 다른 스레드와 상호 작용하지 않는다면, 병렬 처리되지 않은 객체가 동시 응용 프로그램에서 사용될 수 있습니까?

+0

게시물은 코드와 같으며 들여 쓰기가 필요합니다. – Mik378

+0

Threadsafe는 threadsafe입니다. 공유 데이터를 수정하는 경우 동기화해야합니다. 아마도 Listafe의 스레드 세이프 버전이 당신이 원하는 것일 수도 있습니다. – duffymo

+1

예. 비 threadsafe 객체가 한 스레드에서만 사용되는 한 문제는 없습니다. 모든 서버 응용 프로그램은 많은 스레드를 사용하며 각 스레드는 항상 ArrayList, StringBuilder 및 많은 많은 비 스레드 안전 객체를 사용합니다. –

답변

0

이 프로세스가 매핑/축소에 도움이되는지 궁금합니다. 알고리즘에는 동시성이 필요합니다. 물리학과 화학은 문제를 분할하는 방법을 제안합니다. 안전하고 효율적인 동시성을 얻는 쉬운 방법 일 수 있습니다.