There's really no point in doing it like that: You keep adding a new File object to your DemoAlive class, when you can easily pass on all data. If you want to do it your way, you will have to create a new class, also threaded, to check what the current value of the DemoAlive threaded class is, and, if value=4, add a new File object. This way you will overcomplicate such a simple task.
Can you explain a little more what you're trying to do? Maybe I can give you some advice on using threads (or maybe not

).
At first sight it seems lke you're about to process files, correct? And instead of waiting till 1 File is processed so you can proceed the scanning, you want to do it all at once, right?
If this all is true, I'd use a
Queue (FIFO=first in-first out) to store all File objects you found during the scanning of a directory. You store the
Queue (different link than the one above) in a threaded class, suchas your DemoAlive class, and keep appending files to it while you scan. There's probably a limit to the size of the Queue, so you might have to create several instances of the DemoAlive class, and spread the scanned File objects over the threads. There's no point on "updating" the Queue in one of the existing threads, just leave the thread to die once it has processed its Queue.