How to know when mutiple threads have stopped?

Hi all,
I have a for loop in which multiple threads are started.Now I want to perform a UI action when all the threads have returned.But i am not able to make it out as when have all the threads returned.Can anyone help me out with it?
Regards,
Mansi
Edited by: MansiSachar on Sep 1, 2008 11:33 PM

Two methods I can quickly think of that will help you,
I am sure that there is better ways of doing it just to lazy to check for and do them.
method 1): Interface
method 2): Runnable - run()--------------------
publc interface MyThreadListener{
  public void threadGroupStarted();
  public void threadGroupFinnished();
pubilc class GUI extends JFrame implements MyThreadListener{
  private MyOtherThread mot = null;
  public GUI(){
    init();
    mot = new MyOtherThread(this);
  public void threadGroupStarted(){
    System.out.println("Threads Started");
  public void threadGroupFinnished()
    System.out.println("Threads Finnished");
  public static void main(String[] args){
    new GUI();
public class MyOtherThread{
  private MyThreadListener mtl = null;
  public MyOtherThread(MyThreadListener mtl){
    this.mtl = mtl;
  public void startNewParallelThread(.....){
//Create a new thread in this class that will do the for(....) join().
//Add the following code:
  mtl.threadStarted();
  for (Thread t : collectionOfThreads){
    t.join();
  mtl.threadFinnished();Creating a listener will enable you the have the second thread tell the first that it has finnished processing.
pubilc class GUI extends JFrame implements Runnable{//better to create a Runnable Object that implement
  private Thread thread = null;
  public GUI(){
    init();
    thread =new Thread(this);
  public void run(){
    threadGroupStarted();
    for (Thread t : collectionOfThreads){
      t.join();
    threadGroupFinnished();
  public void threadGroupStarted(){
    System.out.println("Threads Started");
  public void threadGroupFinnished()
    System.out.println("Threads Finnished");
  public static void main(String[] args){
    new GUI();
}

Similar Messages

  • How to know when all callbacks have arrived

    I use code like
    for(a thousand times){
    org.xbill.dns.SimpleResolver.sendAsync()//query my nameserver
    public void receiveMessage(Object id,Message msg){
    resolutionsvector.add(msg)
    public void handleException(Object id,Exception e){
    how do i detect when all callbacks are received?
    i tried counting but sometimes the queries match the resolutions while there are still new queries to be created (do not know why thread creation/use is slow sometimes) and sometimes the program fails to detect it has finished.
    thought of creating a resolution class for the resolutionsvector saving the state of all queries and using an additional thead to test if all are processed once every second.
    is that a way to do it or is there a design pattern for 'joining' the threads without being able to do exactly that (the threads are controled by a resolver class i would like to use without changing it) i should apply (if applies: where do i find documentation?)
    best regards
    erik

    ++

  • How to know when invoke bytecode implements?

    I've got a classfile - it has few invokeinterface bytecodes inside - their count is defined dynamically - when class is running.
    And I've got a program, which runs this class.
    The aim of this program - to gather statistics of invokeinterface calling frequency.
    How to know when invokeinterface bytecode implements?
    (In that moment I plan to update several digits)
    Have You got an advise for me?
    Thanks.

    You must use the debugging interface, or get a code profiler. Do a search on all forums for profiler, you'll get tons of information.

  • HT2173 How to know when a hard drive has failed ?

    How to know when a hard drive has failed ?

    Machine doesn't boot.  You experience strange crashes.  Gets wrong results.  Your harddrive is five or more years old.  Time to consider repacing it.   You do have backup?
    You may want to run these "standard" fixes if the problem persists.
    1) Check the amount of free space on your harddrive.  You should have a several gigs free.
    2) You should run disk utility
         a) verify the disk
         b) update your permissions.
    3) Try a safe boot.
        Shutdown your machine.  Hold down the shift key.  Poweron.  Wait awhile Wait awhile while you harddrive
          is being checked.
        http://support.apple.com/kb/ht1455
    4) You may want to run applejack to clean up your machine.
         http://applejack.sourceforge.net/
    a lot more ways to fix your Mac.
    http://www.thexlab.com/faqs/faqs.html
    verify & repair your startup drive
    To verify & repair you file system on the startup drive, you will need to run disk utility from you installation DVD.
    This article  will tell you how to get to disk utility.  Once in a disk utility, you can go and attempt to recover the disk.
    http://support.apple.com/kb/TS1417
    To repair your startup drive, you will need to run disk utility from your startup DVD.
    Mac OS X 10.4: About the utilities available on the Mac OS X 10.4 Install DVD
    http://support.apple.com/kb/HT2055
    How to run disk utility from your startup DVD.
    Insert your  startup DVD  into your reader.  Power down your machine.  Hold down to the c key.  Power on your machine.  This will bootup your startup DVD.
    This will bring you to a panel asking you for your language.  Pick your language.
    You you come to the Install Mac OS panel.  Do not install.
    Click on Utilities menu item.  This will give you a pulldown list of utilities.
    Click on the disk utility.
    You are now in disk utility.  Pick your disk.  Click on repair it should be on the lower right of the panel.
    Once the repair completes successfully, you should update your permissions.
    Verify a disk
    As an alternative, you can verify that the filesystem on the disk is correct. You will not be able to repair the file system.
    I suggest that you use disk utility to verify that your startup disk is OK. 
    Macintosh-HD -> Applications -> Utilities -> Disk Utility 
    Start up disk utility.  On the left pane view, you will see a list of all your disks.  
    Click on your startup disk.
    Click on the First Aid  Tab.
    Click on verify.  
    Hopefully your disk will verify.  If not, you have to boot from your installation DVD and run Disk Utility from there to attempt to repair your file-system.

  • How to know when the JComboBox popup is about to show or hide?

    Hi all,
    In JDK 1.4, a new addPopupMenuListener() was added to the JComboBox component. I found out I have to use JDK 1.3, but I already wrote a lot of code around this particular capability. I am trying to figure out how to duplicate it in JDK 1.3. I need to know BEFORE and AFTER the popup is displayed. OR, is there a way with JDK 1.3 that as soon as they click the combo box, it fires an event. The thing is, as soon as they click it, I want to change the background color. When they are done selecting, I can use an ActionListener or ItemListener to find out what was selected and change the color again. My killer is trying to figure out how to know when they have selected the box. I tried adding MouseListener, PropertyChangeListener, AncestorListener. None are doing a thing when the JComboBox is first selected.
    Any help would be much appreciated.
    Thank you.

    Hi all,
    In JDK 1.4, a new addPopupMenuListener() was added to the JComboBox component. I found out I have to use JDK 1.3, but I already wrote a lot of code around this particular capability. I am trying to figure out how to duplicate it in JDK 1.3. I need to know BEFORE and AFTER the popup is displayed. OR, is there a way with JDK 1.3 that as soon as they click the combo box, it fires an event. The thing is, as soon as they click it, I want to change the background color. When they are done selecting, I can use an ActionListener or ItemListener to find out what was selected and change the color again. My killer is trying to figure out how to know when they have selected the box. I tried adding MouseListener, PropertyChangeListener, AncestorListener. None are doing a thing when the JComboBox is first selected.
    Any help would be much appreciated.
    Thank you.

  • I'm a Microsoft Outlook for Mac user, I need information of how to know when e-mail was readed and confirm receipt of e-mails sent. thank you!  regards Mauricio

    I'm a Microsoft Outlook for Mac user, I need information of how to know when e-mail was readed and confirm receipt of e-mails sent. thank you!  regards Mauricio

    Mail and Address book

  • How to know when the PRICE AFTER DISCOUNT changed and get the value

    Hi,
    Everything I do to see if a value changed in the grid works except for PRICE AFTER DISCOUNT
    which seems to be inaccessible.
    Any idea how to know when exactly this value changed and do actions accordinly ?
    Also I always get 0.00 if I try to get the value of it
    This works to get in the condition of a vlaue changing but I always get 0.00 as the value of the column
    if (pVal.ItemUID == "38" && pVal.ColUID == COL_DISCOUNT.ToString() && pVal.EventType == BoEventTypes.et_VALIDATE && pVal.ItemChanged == true && pVal.ActionSuccess == true)
        try
            SAPbouiCOM.Matrix Matrix = (SAPbouiCOM.Matrix)SBO_Application.Forms.ActiveForm.Items.Item("38").Specific;
            SAPbouiCOM.EditText Editor = (SAPbouiCOM.EditText)Matrix.Columns.Item(COL_DISCOUNT).Cells.Item(pVal.Row).Specific;
            SBO_Application.MessageBox("Discount changed for : " + Editor.Value + "...", 1, "Ok", "", "");
        catch (Exception ex)
            SBO_Application.MessageBox(ex.Message, 1, "Ok", "", "");
    And this do not even get into the condition even tought I SEE the column PRICE AFTER DISCOUNT:
    if (pVal.ItemUID == "38" && pVal.ColUID == COL_PRICEAFTERDISCOUNT.ToString() && pVal.EventType == BoEventTypes.et_VALIDATE && pVal.ItemChanged == true && pVal.ActionSuccess == true)
        try
            SAPbouiCOM.Matrix Matrix = (SAPbouiCOM.Matrix)SBO_Application.Forms.ActiveForm.Items.Item("38").Specific;
            SAPbouiCOM.EditText Editor = (SAPbouiCOM.EditText)Matrix.Columns.Item(COL_PRICEAFTERDISCOUNT).Cells.Item(pVal.Row).Specific;
            SBO_Application.MessageBox("Price after discount changed for : " + Editor.Value + "...", 1, "Ok", "", "");
         catch (Exception ex)
             SBO_Application.MessageBox(ex.Message, 1, "Ok", "", "");

    just idea, maybe it will works
    Create one udf in row level and set there FS based on changes on price after discount and fill value what is in price after discount. Then the validation make on this field instead of standard SAP field.

  • How i know when a EXECUTE_QUERY retrieved last record

    Hi...
    How i know when the EXECUTE QUERY retrieved the last record in a block ....?
    Exist a trigger after trigger POST-QUERY?
    Regards
    Hector Gabriel Ulloa Ligarius
    Santiago of Chile
    http://es.groups.yahoo.com/group/desarrolloOracle/

    Kevin, sorry
    But the :system.last_record not change the value during the execution of EXECUTE_QUERY.
    Only useful when the data was retrieved into blocks...not during..
    Other mode?
    Regards
    Hector Gabriel Ulloa Ligarius
    Santiago of Chile
    http://es.groups.yahoo.com/group/desarrolloOracle/

  • How to know when I'm doing a createInsert?

    how to know when I'm doing a createInsert, this to hide a button when you run this action, I am using a task flow.
    my version of jdeveloper is 12c

    hi,
      So you are using the createInsert as a method call in task flow. That is your form/table will be come new rows and you want to disable some button.
    Your task flow might be as below
          CreateInsert---->Page.
    To do so
    1.) Take properties of your method call and bind the Method property to a method in a bean (bean registered in the task flow with scope view or any higher scope)
    2) Call the create insert operation programmatically in that method.
    3) And in that method after the createinsert ,set a boolean variable in pageFlowScope.
    4)Put this variable in the disable property or visible propery of the button you wabt to hide/diable.
    eg:
        public void doCreateInserOperation(){
            try {
               // Programatically invoke CreateInsert
                DCBindingContainer bindings = (DCBindingContainer)getBindingContainer();
                bindings.getOperationBinding("CreateInsert").execute();
            //Set a variable in page Flow Scope 
            AdfFacesContext.getCurrentInstance().getPageFlowScope().put("disableButton", true)
            } catch (Exception e) {
                e.printStackTrace();
        public BindingContainer getBindingContainer() {
            FacesContext facesContext = getFacesContext();
            Application app = facesContext.getApplication();
            ExpressionFactory elFactory = app.getExpressionFactory();
            ELContext elContext = facesContext.getELContext();
            ValueExpression valueExp = elFactory.createValueExpression(elContext, "#{bindings}", Object.class);
            return (BindingContainer)valueExp.getValue(elContext);
    you can access this variable in EL expression as #{pageFlowScope.disableButton}. So when your page render it will be in CreateInsert mode and the button will be disabled/hidden.
    I hope this will help you.
    With regards,
    Gijith.

  • How to download when i already have a serial number, but no drive to install the cd in my lap

    how to download when i already have a serial number, but no drive to install the cd in my lap

    Download the trial version and activate it.
    Mylenium

  • Thread concurrency problem - how to know when thread is dead?

    My applet uses a thread to draw an iteration graph step by step.
    The user as the option of pressing two buttons:
    - PLAY button - iteration Points are stored in an arrayList and drawn step by step (a sleeping time follows each step) (drawIterations thread)
    - TO_END button - iteration Points are all stored in the arrayList (swingworker thread) and after all of them have been stored the graph is drawn instantly.
    I have problems in this situation:
    When executing the PLAY-button thread, if the user presses TO_END button, the remaining graph lines should draw instantly. Sometimes I get more points on the graph than I should. It seems that the PLAY thread, which I stop when TO_END buton is pressed, still remains storing new points into the arrayList concurrently to the new thread created after TO_END button was pressed .
    Any ideas?
    I'm already using synchronization.
    private volatile Thread drawIterations;
    public void playButtonClick(JToggleButton btn) {
         pointSet1 = new ArrayList<Point2D.Double>();
         if (drawIterations == null) drawIterations = new Thread(this,   "drawIterations");
         drawIterations.start();
    public void toEndButtonClick(JToggleButton btn) {
         stopThread() ;
         pointSet1 = new ArrayList<Point2D.Double>();
         computeIterationGraphPointsAndRefreshGraph();
    public synchronized void stopThread() {
         drawIterations = null;
         notify();
    private void computeIterationGraphPointsAndRefreshGraphs() {
         SwingWorker worker = new SwingWorker() {
              public Object construct() {
                   // compute all iteration points
                         //repaint graph
         worker.start();
    }Is there a way of testing if a thread is actually dead after setting the thread object to null??

    In general, a Thread keeps running until it's run
    method completes. Threads don't stop when their
    handle is set to null. Your run method should
    constantly be checking on a variable to know when to
    stop running and exit the run method. In this case,
    you could check on the drawIterations variable to see
    if it's null.<br>
    <br>Even using the following line on my run method I get the the same problem:
    <br>
    <br>while (myThread == drawIterations && drawIterations!=null && halfStep < 2 * totalIterations) {
    <br>...
    <br>
    <br>Here's the whole method:
    <br>(actually there are 2 graphs being drawn and the second is only refreshed every 2 steps:)
    <br>
    <br>     <br>public void run() {
         <br>  Thread myThread = Thread.currentThread();
         <br>  int totalIterations = transientIterations +iterationsToDraw ;
              <br>  while (myThread == drawIterations && drawIterations!=null && halfStep < 2 * totalIterations) {
              <br>     computeNextHalfIterationGraphPoint( );
              <br>      if (!TRANSIENT_IS_ENABLED || halfStep >= 2*transientIterations ) {// is     not in transient calculations
              <br>                       graphArea1.repaint();
              <br>                       if (halfStep%2 ==0 ) graphArea2.repaint();
              <br>                       if (halfStep < 2*totalIterations){//no need to execute the following block if at last iteration point
                   <br>                         if (lastIterationPointsFallOutsideGraphArea(toEndCPButtonActive)) break;
                        <br>          try {
                             <br>                      Thread.sleep(sleepingTimeBetweenHalfIterationRendering);
                             <br>                      if (threadInterrupted ){//if clause included to avoid stepping into a synchronized block if unnecessary
                                  <br>                        synchronized (this) {
                                       <br>                          while (threadInterrupted && myThread==drawIterations ) wait();
                                                      <br>    }
    <br>                                               }
         <br>                                   } catch (InterruptedException e) {
              <br>                                     break;
                   <br>                         }     
                        <br>               }
    <br>                            }
         <br>        stopThread();
         <br>     }
    <br>

  • How to know when I have scrolled to the bottom of my advancedDataGrid

    I need to know when I have scrolled to the bottom of my advancedDataGrid or when the last row appears on the screen. Is there anyway of getting this?
    I tried to do it by the verticalScrollPosition, but I don't know how to find the maxScrollPosition.
    Any help would be appreciated.

    Follow above instructions. Use the App Store to get applications for your computer via Apple. Apps for your iDevice are purchased through the iTunes Store. These are two different stores. Now you will have Numbers on your iPhone or iPad or iPod Touch, and then one for your Mac computer.
    The Dock icon for the App Store looks like this:

  • Using the warp tool I'm stabilizing  my video and getting rid of the edge artifacts. Analyizing is clear on how long the process will take, but when it stabilizes I only get three moving dots. I there a way to know when the process will stop? Thanks.

    I am using the warp tool to stabilize my video and get rid of the edge artifacts.  The program is very clear about how long it will take to analyze, but there is nothing about how long the stabilization will take nor when I know when it is complete.   Thanks ahead of time.

    Warp Stabilising is a two part process.
    Analysis and Stabilising.
    Both have a banner across the Program Monitor during the process ( unless you have turned that off.
    Analysis start automatically on forst application...but you can rock in there and start adjusting the parameters.
    You may need to hit "Analyse" Button again.
    You should see the number of frames and the estimated duration during this process.

  • How to know when ListView finished rendering elements?

    I have a ListView with many items inside.
    After I assign the ListView an ItemsSource, I need to know when all items finished rendering on my page.
    I can just nothing with my eyes it takes like 2 seconds to render all elements, and I need to subscribe to an event like "ListView.RenderingCompleted", because I can proceed with other operations after all elements are rendered and
    visible to the user ( meanwhile I can show a loading bar ).
    I cannot find something similar, how can I do that?

    >>I need to know when all items finished rendering on my page.
    I am afraid there is "all containers generated" event.
    The ListView uses UI virtualization so visual containers are only created for the currently visible items, i.e. not all the containers will be created at once.
    You could handle the Loaded event of the root item in the ItemTemplate to know when each individual container is ready for interaction:
    <ListView x:Name="listview" Height="200">
    <ListView.ItemTemplate>
    <DataTemplate>
    <Grid Loaded="grid_Loaded">
    <TextBlock Text="{Binding}"></TextBlock>
    </Grid>
    </DataTemplate>
    </ListView.ItemTemplate>
    </ListView>
    If you know the approximate number of items you can then for example write some code in the code-behind that hides the loading bar when a certain number of Loaded events has been raised.
    Or you could possibly handle the Loaded event of the ListView. The Loaded event occurs when the element has been constructed, added to the visual tree and is ready for interaction.
    Please remember to close your threads by marking helpful posts as answer and please start a new thread if you have a new question.

  • Thread: How to tell when the thread is finished AND how to kill it?

    Hi there,
    I have a thread that runs in the background and does this:
    class MyThread implements Runnable 
              public void run()
                   Stopper stopper = new Stopper();
                            //do something that takes some time
                            stopper.stop();
                            System.out.println("total time "+stopper.getTime());
    }this works fine (I have a swing gui where I click a button and this thread runs and it's ok. PROBLEM IS, when I click the button again (to re-activate the thread) it seems that the stopper is not null but still counting the time (I was under the impression that ...= new Stopper() will create a new object type Stopper).
    so -
    1. How can I tell when thread is finished?
    2. How do I kill this thread once it is finished?
    the invocation:
         public void actionPerformed(ActionEvent arg0)
              Thread t = new Thread( new MyThread());
              t.start();          
         }THANK YOU!

    You have not posted to code for Stopper, so it's impossible to reason about that
    1. How can I tell when thread is finished?
    Use Thread.Join() or Thread.isAlive()
    2. How do I kill this thread once it is finished?
    You can't and you don't. Just let the method the thread is running exit normally. Sometimes that means putting in a boolean variable to control a loop, and then exiting when the boolean is false.
    Another thought - you could set the thread as a Daemon thread - when you don't have any non-daemon threads running, java will exit.

Maybe you are looking for

  • IDVD and Toast-anyone else had this problem?

    I apologize for the long post, but it is necessary to explain the situation. I have made 4 projects in iDVD6, 2 SL, 2 DL with no problems. I edit in imovie, send to idvd, then make images which I burn with toast (though I know it is not recommended f

  • My iphone 5 is not connecting to my home wifi any ideas?

    iphone connects to wifi at office but not at home, tried resetting phone and router but to no effect, all suggestions appreciated

  • Tranracation ME13 how to read PO text ?

    Hi Gurus, In ME13 transaction there two text i have to  read and display in report program.   One text is info record note i am reading the reading the text by using function module READ_TEXT. Second text is purchase order text. Here i have problem w

  • Displaying task in timeline webpart based on view from task list

    I have added one custom column in task list called category and created different view based on different values of category. when I display a view and select show timeline, it display all the task and does not filter the task based on view. Is there

  • My bluetooth seems just to search without connecting...

    My bluetooth seems just to search without connecting and finding any phones, PCs. If I send the transfer from another phone or pc, it does ask to pair up but always says not supported. Anyone knows how to fix this issue?