Solved

Thread problem!!!

Posted on 2003-11-05
14
198 Views
Last Modified: 2010-03-31
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
Comment
Question by:aimueller
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 3
  • 2
  • +1
14 Comments
 
LVL 15

Expert Comment

by:jimmack
ID: 9687136
>> 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
 
LVL 15

Expert Comment

by:jimmack
ID: 9687156
Use a TimerTask to do the copying if you want to schedule this to happen every 10 seconds.
0
 
LVL 15

Expert Comment

by:jimmack
ID: 9687201
If you have problems with your code, please post it, we'll be happy to help.
0
Optimize your web performance

What's in the eBook?
- Full list of reasons for poor performance
- Ultimate measures to speed things up
- Primary web monitoring types
- KPIs you should be monitoring in order to increase your ROI

 
LVL 86

Expert Comment

by:CEHJ
ID: 9687445
>>The program only needs 1 thread to do this.

Of course, the Timer/TimerTask combo is using other threads behind the scenes...
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 9687451
...but this question smacks of homework ;-)
0
 
LVL 15

Expert Comment

by:jimmack
ID: 9687485
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
 
LVL 86

Expert Comment

by:CEHJ
ID: 9687720
Timer uses threads internally
0
 
LVL 15

Expert Comment

by:jimmack
ID: 9687733
Thanx ;-)
0
 
LVL 92

Accepted Solution

by:
objects earned 500 total points
ID: 9691208
> 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
 

Author Comment

by:aimueller
ID: 9696754
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
 
LVL 92

Expert Comment

by:objects
ID: 9697083
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

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

An old method to applying the Singleton pattern in your Java code is to check if a static instance, defined in the same class that needs to be instantiated once and only once, is null and then create a new instance; otherwise, the pre-existing insta…
By the end of 1980s, object oriented programming using languages like C++, Simula69 and ObjectPascal gained momentum. It looked like programmers finally found the perfect language. C++ successfully combined the object oriented principles of Simula w…
Viewers will learn about the different types of variables in Java and how to declare them. Decide the type of variable desired: Put the keyword corresponding to the type of variable in front of the variable name: Use the equal sign to assign a v…
Viewers will learn about basic arrays, how to declare them, and how to use them. Introduction and definition: Declare an array and cover the syntax of declaring them: Initialize every index in the created array: Example/Features of a basic arr…

634 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question