1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
package tim.prune.load;
import java.io.File;
/**
* Holds a lock on the given file and performs some action
* when all locks are released
*/
public class FileToBeLoaded
{
private final File _file;
private final Runnable _afterwards;
private int _ownerCounter;
public FileToBeLoaded(File inFile, Runnable inAfterwards)
{
_file = inFile;
_afterwards = inAfterwards;
_ownerCounter = 1;
}
public File getFile() {
return _file;
}
/** Accept ownership, perhaps for use in different thread */
public synchronized void takeOwnership() {
_ownerCounter++;
}
/** Release ownership */
public synchronized void release()
{
_ownerCounter--;
if (_ownerCounter == 0) {
_afterwards.run();
}
}
}
|