ハードディスクから現金化したファイルをデータベースから同期しようとしています。Javaでファイル書き込みシステムを同期しようとしています
ファイルが存在するかどうかを確認する際に何をしているのか、そうでない場合はファイルをデータベースから取り出して展開します。私はレースの条件のためにファイルを何度も書きたくないです。
にとって必須:ここ
は私が作ったコードです。このコードは、そのすべての意味を私は見つけていない場合は、このソリューションで@Override public String getThumbnailPictureUrl(Design design) { String relativePath = String.format(THUMBNAIL_URL, design.getId(), design.getThumbnailPicture().getFileName()); String realPath = servletContext.getRealPath("/"+relativePath); logger.info("Request Thumbnail picture for design: " + design.getId()); logger.info("Thumbnail picture relative path: " + relativePath); logger.info("Thumbnail picture real path: " + realPath); File file = new File(realPath); if(!file.exists()) { synchronized (thumbnailLock) { if(!file.exists()) { logger.warn("Could not fild file in path: " + realPath); FileAttachment pictureAttachment = design.getThumbnailPicture(); Hibernate.initialize(pictureAttachment.getAttachment()); Data data = (Data) pictureAttachment.getAttachment(); file = toolBox.convertBlobToFile(data.getBlob(), file); logger.warn("file created in path: " + realPath); } } } return relativePath; }
と豆の内部にあります私は本当に他のファイルと同様に2回もファイルを書いていません。別のファイルを書き込んでも、すべてのスレッドがそれに到達しようとしているブロック全体を同期しています。
提案がありますか?
ありがとうございました。
Javaのどのバージョンですか? – erickson