I am working on Java multithreading , where I am starting 4 threads after assigning 4 different files to them , to be uploaded to the server.

My objective is , when one thread completes file upload , I need to start another thread assigning a new file to it.

After each file upload , I receive a notification from the server.

// The code for adding the first set of files 

```
 for (int count = 0; count < 4; count++) {
                if (it.hasNext()) {
                    File current = new File((String) it.next());

                    try {
                        Thread t = new Thread(this, current );
                        t.start();
                        t.sleep(100);
                    } catch (Exception e) {
                    }
                }
            }

```

Now , I am assigning another thread with a file & keeping the thread in a wait state .
When a previous thread notifies , the current thread should start upload.

```
if (tempThreadCounter == 4 ) {

                if (it.hasNext()) {
                    File current = new File((String) it.next());
                        try {
                        Thread t = new Thread(this, current);
                        t.start();

                        synchronized (this) {
                            t.wait();
                        }
                        tempThreadCounter++;
                    } catch (Exception e) {
                    }
                }
            }

```

On the final statement on the run method , I am adding the following statement.

```
public void run (){

// Performing different operations

//Final statement of the run method below
synchronized (this) {
   this.notifyAll();
}
}

```

Currently , all the 5 threads are starting uploading at the same time.
It should be that the first 4 threads should start uploading & the fifth thread should start only when it it notified by any thread that it had completed its operation.

Any suggestions on the incorrect Thread implementation.