Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 201
  • Last Modified:

Thread problem!!!

I am a beginner in thread-programming and want to solve this problem:

a text-file should be copied every 10 sec. from folder A to folder B.
first the program should read a lock-file that indicates 1 or 0.
If the lock-file set to 1 the program should try for 10 sec. then exit else the program can copy the text-file from folder A to folder B (the program should set the lock-file to 1 before starting copy the text-file and after finishing to 0)

How many thread should be used??
any ideas ??
can somebody help

regards

andreas
0
aimueller
Asked:
aimueller
  • 5
  • 3
  • 2
  • +1
1 Solution
 
jimmackCommented:
>> If the lock-file set to 1 the program should try for 10 sec. then exit

Do you mean the program (thread) should *wait* for 10 seconds or that it should repeatedly read the lock-file and try to copy the file for 10 seconds?

The program only needs 1 thread to do this.
0
 
jimmackCommented:
Use a TimerTask to do the copying if you want to schedule this to happen every 10 seconds.
0
 
jimmackCommented:
If you have problems with your code, please post it, we'll be happy to help.
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
CEHJCommented:
>>The program only needs 1 thread to do this.

Of course, the Timer/TimerTask combo is using other threads behind the scenes...
0
 
CEHJCommented:
...but this question smacks of homework ;-)
0
 
jimmackCommented:
Hi CEHJ ;-)

I wondered where you'd got to.  Over half an hour :-O

I agree.  It's almost certainly a homework question, but to give him his due, aimueller has only asked for suggestions and not a full answer (so far) ;-)

Just for interest:

>> the Timer/TimerTask combo is using other threads behind the scenes

Does a Timer count as a thread or does it use OS facilities (where available)?
0
 
CEHJCommented:
Timer uses threads internally
0
 
jimmackCommented:
Thanx ;-)
0
 
objectsCommented:
> How many thread should be used??

Depends on how you want to handle if the process of copying takes >10secs.
If you want to perform the copy process every 10 seconds regardless of whether the previous copy has completed or not (which appears to be the case) then you will need to start a new Thread every 10 seconds.
So you will need one thread that starts a a new Thread every 10 seconds:

public void run()
{
   while (!stopped)
   {
   try
   {
      new CopyThread(filelock).start();
      Thread.sleep(10000);
   }
   catch (Exception ex)
   {
      ex.printStackTrace();
   }
   }
}


public class CopyThread extends Thread
{
   ...
   public void run()
   {
      // do your copy here
   }
}
0
 
aimuellerAuthor Commented:
Hi All,

this is the code that I use, it works fine on linux. It does the following:
while a.txt is set to 0
 wait 10 sec.
 try again
 and again
 till a.txt sets to 1

- The question should be the solution multithreaded?? since this application work only with one thread, it may block on some system (windows)

somebody has any tips how can the solution look like??

thanks

Andreas
 
//-----------------begin-----------------------------------------------
import java.io.*;

public class CopyFile {

  public static void main(String[] args) throws Exception{

    new Thread() {
      public void run() {
        boolean done = false;
        while( !done ) {
          if (CopyFile.readBlockFile("a.txt")) {
            copyFile("a.gif","b.gif");
            done = true;
          } else {
            try {
              System.out.println("waiting..");
              Thread.sleep(10000);
            }
            catch (InterruptedException e) {}
          }
        }
      }
    }.start();
  }

  public static boolean readBlockFile( String file) {
    String line = null;
    int num = 0;
    try {
      BufferedReader is = new BufferedReader(new FileReader(file));
      while ( (line = is.readLine()) != null) {
        num = Integer.parseInt(line);
      }
      is.close();
    }catch(Exception e) {}
      if ( num == 1)
        return true;
      else
      return false;
  }


  public static void copyFile( String inFile, String outFile) {
    try {
      BufferedInputStream is = new BufferedInputStream(new FileInputStream(
          inFile));
      BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(
          outFile));
      int c;
      while (( c = is.read()) != -1) {
        os.write(c);
      }
      is.close();
      os.close();
    }catch(Exception e) {
      System.out.println("error: " + e.toString());
    }

  }

}
//------------------------ end--------------
0
 
objectsCommented:
Your solution is multithreaded, as is the suggestion I posted above.
Difference with the code I posted is that it starts a seperate thread to handle every copy, whereas your code handles all copies from the one thread.
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

  • 5
  • 3
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now