基本的に私の階層は、クラス B の 100 スレッドを開始するクラス A があり、クラス B は というクラスを使用しFileCreator
ます。クラスには、同期さFileCreator
れるというメソッドがあります。writeToFile()
これは、クラス B 内でインスタンス化する方法です。
FileCreator newFile = new FileCreator(downloadFolder, content, page.getWebURL());
newFile.writeToFile();
今、私の問題はwriteToFile()
実際には同期されていません。基本的にこれは私が私にしたことですwriteToFile()
public synchronized void writeToFile() {
System.out.println("Thread accessed");
//Some stuff here
System.out.println("Thread FINISHED!");
}
ただし、コンソールで次の結果が得られます。
Thread accessed
Thread accessed
Thread FINISHED!
Thread FINISHED!
したがって、実際には同期していません。これらのクラスは異なるスレッドによってアクセスされるため、それが問題の原因であると想定しています。一度に 1 つのアクセスしかないように、メソッドを実際に同期する方法はありますか?