Waiting on unknown threads to finish
I have made the ExecutionService class, and now i have a small problem. The point of the class was to split the job normally done by one thread into as many as possible. Now, i need the thread that called executeInstantly/waitToExecute to wait until the requested task(s) are done, and there are no more tasks to process. What would be the best way to implement that? Note, only one thread will be adding to the Queue of tasks, and its the same one that needs to wait on them to finish.
package jad.util;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class ExecutionService {
public ExecutionService() {
runnableTasks = new LinkedBlockingQueue<Runnable>(Integer.MAX_VALUE);
initializeExecutors(Runtime.getRuntime().availableProcessors());
public ExecutionService(BlockingQueue<Runnable> blockingQueue) {
runnableTasks = blockingQueue;
initializeExecutors(Runtime.getRuntime().availableProcessors());
public ExecutionService(final int NUM_THREADS, final int MAX_JOBS) {
runnableTasks = new LinkedBlockingQueue<Runnable>(MAX_JOBS);
initializeExecutors(NUM_THREADS);
private final void initializeExecutors(final int NUM_THREADS) {
for (int i = 0; i < NUM_THREADS; i++) {
createNewExecutor();
++numThreadsRunning;
private final Runnable getPermTask() {
return new Runnable() {
@Override
public void run() {
Exception ex = null;
try {
while (continueRunning) {
getNewTask().run();
} catch (InterruptedException e) {
(ex = e).printStackTrace();
} catch (Exception e) {
(ex = e).printStackTrace();
} finally {
if (ex != null) {
createNewExecutor();
private Executor createNewExecutor() {
return new Executor(getPermTask());
private Runnable getNewTask() throws InterruptedException {
return runnableTasks.take();
public boolean executeImmediately(Runnable task) throws Exception {
if (!continueRunning) {
throw new Exception("ExecutorService instance is shut down");
return runnableTasks.offer(task);
public void waitToExecute(Runnable task) throws InterruptedException, Exception {
if (!continueRunning) {
throw new Exception("ExecutorService instance is shut down");
runnableTasks.put(task);
public void shutDown() {
continueRunning = false;
Runnable emptyTask = new Runnable() {
@Override
public void run() {
return;
for (int i = 0; i < numThreadsRunning; i++) {
try {
waitToExecute(emptyTask);
} catch (InterruptedException e) {
System.out.println("Could not shut down!");
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
private int numThreadsRunning = 0;
private volatile boolean continueRunning = true;
private BlockingQueue<Runnable> runnableTasks;
class Executor {
public Executor(Runnable task) {
Thread t = new Thread(task);
t.setDaemon(true);
t.setName("Executor service thread");
t.start();
}Edited by: Jadz_Core on Aug 6, 2009 9:36 PM
You would use a java.util.CountDownLatch if you only wanted to wait for the tasks currently executing and waiting in the queue (for example, there would be no tasks added AFTER the waiting began). I think this is suitable for your situation since you said there would be just one thread adding to the queue.
Pseudocode:
class ExecutorService {
private volatile CountDownLatch counter = new CountDownLatch(Integer.MAX_VALUE); //start countdown latch at really high values
private AtomicInteger activeThreadCount = new AtomicInteger(0); //keep track of threads actually working
private BlockingQueue queue; //keep waiting tasks
class PermTask implements Runnable
public void run()
while (!shutdown)
Runnable task = queue.take();
activeThreadCount.incrementAndGet();
try
taskToRun.run();
finally
activeThreadCount.decrementAndGet();
counter.countDown();
public void waitForTasksToComplete()
int totalTasks = queue.size() + activeThreadCount.get();
counter = new CountDownLatch(totalTasks);
counter.await();
}This would take a bit of cleaning up, for instance you have to protect the activeThreadCount and the counter so that the values don't change in the middle of some work (a ReadWriteReentrantLock might work nicely here - the PermTask would acquire Read Locks so they don't block each other. The wait... method acquires a Write lock to it waits for Reads to finish, and blocks more Reads until it is done). But it should get you started.
Edited by: stevejluke on Aug 7, 2009 7:01 AM
Similar Messages
-
Application waits for the thread to finish
Hi all,
I have a class let say test that extends Thread.
In my application i say:
test Xtest = new test();
Xtest.start();
System.out.println("Thread finished");
I need my application to wait for the thread to finish for it to continue, i.e. in my example print "Thread finished" .
Can someone help me.
Thanks in advance for your help.
Best regards,
Saadi MONLAThis should work:
test Xtest = new test();
Xtest.start();
Xtest.join();
System.out.println("Thread finished"); -
Waiting for a thread to finish
I've been researching this issue for a couple of days, but I dont think I know enough about threading to ask the right question in a search engine. Sorry if this is a basic blunder....I dont write swing often and it shows.
I have a swing app that includes a long task so I have implemented a progress bar. I need to wait until the progress bar task completes before continuing to the rest of the method. I've tried:
1. Putting the progress bar within a while loop (while task not complete...) but the progress bar dialog does not render fully. I've even added repaint, but still the dialog looks blank.
2. SwingUtilities.invokeLater, but it doesnt wait until the progress bar is finished
3. SwingUtilities.invokeAndWait, though after all the reading I did about deadlock conditions I didnt like the idea. However I was desperate so I tried it and got an error:"Cannot call invokeAndWait from the event dispatcher thread".
4. Putting the code that needs to occur after the progress bar in an "invokeLater" thread
5. I've also used the ProgressBarDemo from the java.sun example with the swingworker hoping the worker thread would handle the issue.
A much smaller version of the code is below:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.Border;
public class ProblemCode extends JFrame
private JFrame jFrame = null;
private JPanel jMain = null;
private JButton startButton = null;
public ProblemCode()
initialize();
public void initialize()
//Setup the main application window size
jFrame = new JFrame();
jFrame.setContentPane(getJMainPanel());
jFrame.pack();
jFrame.addWindowListener(new java.awt.event.WindowAdapter()
public void windowClosing(java.awt.event.WindowEvent e)
dispose();
SwingUtilities.invokeLater(new Runnable()
public void run()
jFrame.setVisible(true);
private JPanel getJMainPanel()
if(jMain == null)
jMain = new JPanel();
jMain.add(getJStartButton());
return jMain;
private JButton getJStartButton()
if (startButton == null)
startButton = new JButton();
startButton.setText("Start");
startButton.setVisible(true);
startButton.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent e)
SwingUtilities.invokeLater(new Runnable()
public void run()
progBar();
System.out.println("Do this after the progress bar completes");
SwingUtilities.invokeLater(new Runnable()
public void run()
System.out.println("invokeLater doesnt work either....");
return startButton;
private void progBar()
JFrame jProgFrame = new JFrame("JProgressBar Sample");
jProgFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container content = jProgFrame.getContentPane();
final JProgressBar progressBar = new JProgressBar();
new Thread()
private int counter = 0;
private final int val = (int)(Math.random()*10)+1;
public void run()
for(int i = 0;i <= 100;i++)
counter += val;
javax.swing.SwingUtilities.invokeLater( new Runnable()
public void run()
progressBar.setValue(counter);
try
Thread.sleep(500);
catch (InterruptedException e)
}.start();
progressBar.setStringPainted(true);
Border border = BorderFactory.createTitledBorder("Reading...");
progressBar.setBorder(border);
content.add(progressBar, BorderLayout.NORTH);
jProgFrame.setSize(300, 100);
jProgFrame.setVisible(true);
public static void main(String[] args)
SwingUtilities.invokeLater(new Runnable()
public void run()
new ProblemCode();
}Thank you for taking the time to review this.Hi,
I made some tiny changes in yoyr code, marked with
// PBHere the changed code
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.Border;
public class ProblemCode extends JFrame {
private JFrame jFrame = null;
private JPanel jMain = null;
private JButton startButton = null;
public ProblemCode() {
initialize();
public void initialize() {
// Setup the main application window size
jFrame = new JFrame();
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // PB
jFrame.setContentPane(getJMainPanel());
jFrame.pack();
jFrame.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
dispose();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
jFrame.setVisible(true);
private JPanel getJMainPanel() {
if (jMain == null) {
jMain = new JPanel();
jMain.add(getJStartButton());
return jMain;
private JButton getJStartButton() {
if (startButton == null) {
startButton = new JButton();
startButton.setText("Start");
startButton.setVisible(true);
startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
progBar();
System.out
.println("Do this after the progress bar completes");
SwingUtilities.invokeLater(new Runnable() {
public void run() {
System.out
.println("invokeLater doesnt work either....");
return startButton;
private void progBar() {
JFrame jProgFrame = new JFrame("JProgressBar Sample");
jProgFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container content = jProgFrame.getContentPane();
final int val = (int) (Math.random() * 10) + 1; // PB
final JProgressBar progressBar = new JProgressBar(0, 100 * val); // PB
progressBar.setStringPainted(true);
Border border = BorderFactory.createTitledBorder("Reading...");
progressBar.setBorder(border);
content.add(progressBar, BorderLayout.NORTH);
jProgFrame.setSize(300, 100);
jProgFrame.setVisible(true);
// PB
final Thread longTask = new Thread() {
private int counter = 0;
public void run() {
for (int i = 0; i <= 100; i++) {
counter += val;
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
progressBar.setValue(counter);
try {
Thread.sleep(100); // PB
} catch (InterruptedException e) {
longTask.start();
// PB
Thread followUpTask = new Thread(new Runnable() {
@Override
public void run() {
try {
System.out.println("Follow up task is waiting");
longTask.join();
System.out.println("Follow up task continues");
} catch (InterruptedException e) {
e.printStackTrace();
followUpTask.start();
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new ProblemCode();
}Piet -
Waiting unknown threads to be completed.
Hi all,
Here is my issue:
TaskRunner runner = TaskRunner.getInstance();
for(Task task : tasks) {
runner.run(task);
System.out.println("Done!");Each task may (probably will) create one or more sub-threads... How can I ensure that, by the time I print "Done!", that every task has been completely executed?
Is there any way to wait for unknown threads to finish before continuing? By unknown, I mean I know absolutely nothing about them (no name, no group...).
EDIT - I must add I can't touch TaskRunner's code...
Thank you all in advance!
Best regards,
Guilherme
Edited by: guilherme.tramontina on Aug 16, 2009 8:28 AM
Edited by: guilherme.tramontina on Aug 16, 2009 8:43 AMAll,
ExecutorService didn't work for this specific issue.
So I solved my problem by doing the following:
Moved the "for" statement into a new Thread class. Please note the "super()" call... This new Thread is created into a new ThreadGroup.
public class TaskRunnerThread extends Thread {
private List<Task> tasks;
public TaskRunnerThread(List<Task> tasks) {
super(new ThreadGroup("TRThreadGroup", "TRThread");
this.tasks = tasks;
public void run() {
TaskRunner runner = TaskRunner.getInstance();
for (Task task : tasks) {
runner.run(task);
}And then...
TaskRunnerThread trThread = new TaskRunnerTask(tasks);
trThread.start();
groupJoin(tsThread.getThreadGroup());
System.out.println("Done!");Here is the "groupJoin" method:
private void join(ThreadGroup t) {
synchronized (t) {
while (t.activeCount() > 0) {
try {
t.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}It worked like a charm!
Thanks for your help!
Best regards,
Guilherme -
Hi
I am trying to build a general wait screen like this
public class Wait extends javax.swing.JFrame {
private Thread counterThread;
private String titleWindow;
public Wait(String title, Thread tr) {
initComponents();
this.setTitle(title);
this.setLocationRelativeTo(null);
this.setVisible(true);
counterThread = tr;
try {
URL url = new URL("file:///c:/Foronomos/resources/25-0.gif");
Icon icon = new ImageIcon(url);
jLabel1.setIcon(icon);
jLabel1.setText("");
} catch (Exception ex) {
counterThread.start();
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jButtonCancel = new javax.swing.JButton();
jButtonStart = new javax.swing.JButton();
}// </editor-fold>
private void jButtonCancelActionPerformed(java.awt.event.ActionEvent evt) {
counterThread.interrupt();
// Variables declaration
private javax.swing.JButton jButtonCancel;
private javax.swing.JButton jButtonStart;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
// End of variables declaration
}then am display the wait screen from a class creating a new thread
ShowDocument showDocument = new ShowDocument();
showDocument.showDocument(id, Main.searchDocuments.getQueryString());
Thread counterThread = new Thread(showDocument, "showDocument");
new Wait("Wait...",counterThread);
....my problem is that the wait screen delays to displayed on the screen an seems like to wait until the thread is finished
Am i something missing here?TeoDim wrote:
thanx for reply
After the code new Wait("Wait...",counterThread);)
i am not doing nothing.So you are doing something?
Just if i press a button i want to display a screen with results from a long delay time query. So i want to display at that time a form with a messageFrom where are you execution the long running task? Where is it executing? Are you sure that you aren't using the AWT/Swing thread? -
Update of jlabel does not happen when i wait for thread to finish (join())
gurus please help.
I have a main application which in actionevent calls a thread, that thread calls parent method to update ths status in jlabel, but when i use thread.join() to wait for process to complete, the jlabel does not get updated, please tell me how can i update the jlabel, i have to wait for thread to finish and during run i need to update the jlabel.
thankshi camickr and gurus:
here is the code:
notice after pressing the Process button, the label is being updated but its not working. I called the processnow() method directly and also by thread, but in thread I have to wait until it finishes using join() but still does not work, please help. Thanks
package label;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.text.*;
import javax.swing.border.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
public class thePanel extends JDialog {
private DefaultTableModel tableModel = null;
private JTable theTable = new JTable();
private JScrollPane scrollPane = new JScrollPane();
JPanel tPanel = new JPanel();
private Border mainBorder;
private BorderLayout borderLayout1 = new BorderLayout();
private BorderLayout borderLayout2 = new BorderLayout();
private BorderLayout borderLayout3 = new BorderLayout();
private BorderLayout borderLayout4 = new BorderLayout();
private JPanel statusPanel = new JPanel();
private JPanel buttonPanel = new JPanel();
private JPanel lowerPanel = new JPanel();
private JLabel statusBar = new JLabel();
private JButton processButton = new JButton("Process");
public JButton closeButton = new JButton("Close");
boolean image = true;
theProcess processThread;
Vector tableData = new Vector();
ImageIcon Image = new ImageIcon("image.gif");
ImageIcon oImage= new ImageIcon("oimage.gif");
boolean errorOcurred=false;
String statusMessage;
public thePanel() {
try {
jbInit();
} catch(Exception e) {
e.printStackTrace();
private void jbInit() throws Exception {
tPanel.setPreferredSize(new Dimension(800,424));
mainBorder = new TitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED)," ");
statusPanel.setBorder(BorderFactory.createEtchedBorder());
tPanel.setBorder(mainBorder);
tPanel.setLayout(borderLayout1);
scrollPane.getViewport().add(theTable, null);
tPanel.add(scrollPane, BorderLayout.CENTER);
// status
statusPanel.setLayout(borderLayout2);
statusPanel.setBorder(BorderFactory.createEmptyBorder());
statusBar.setAlignmentX((float) 0.5);
statusBar.setBorder(BorderFactory.createLoweredBevelBorder());
statusBar.setMaximumSize(new Dimension(600, 21));
statusBar.setMinimumSize(new Dimension(600, 21));
statusBar.setPreferredSize(new Dimension(600, 21));
statusPanel.add(statusBar, BorderLayout.SOUTH);
// buttons
processButton.setPreferredSize(new Dimension(70,25));
processButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
process_actionPerformed(e);
closeButton.setPreferredSize(new Dimension(70,25));
buttonPanel.setLayout(borderLayout3);
buttonPanel.setBorder(BorderFactory.createRaisedBevelBorder());
buttonPanel.add(processButton,BorderLayout.WEST);
buttonPanel.add(new JPanel());
buttonPanel.add(closeButton,BorderLayout.EAST);
// lower panel
lowerPanel.setLayout(borderLayout4);
lowerPanel.setBorder(BorderFactory.createEmptyBorder());
lowerPanel.add(statusPanel, BorderLayout.WEST);
lowerPanel.add(buttonPanel, BorderLayout.EAST);
tPanel.add(lowerPanel, BorderLayout.SOUTH);
theTable.setAutoCreateColumnsFromModel(true);
theTable.setColumnSelectionAllowed(false);
theTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
theTable.getTableHeader().setReorderingAllowed(false);
getContentPane().add(tPanel);pack();
getinfo();
show();
private void prepairTable(){
tableModel = new DefaultTableModel(){
public boolean isCellEditable(int row, int col)
{ return false; }};
tableModel.addColumn("text 1");
tableModel.addColumn("text 2");
tableModel.addColumn("text 3");
tableModel.addColumn("text 4");
tableModel.addColumn("text 5");
theTable.setModel(tableModel);
} // end method (prepairTable)
public void refreshTable() {
prepairTable();
public void getinfo() {
try {
refreshTable();
tableModel.addRow(new Object[]{"3465465555","0123456789",new Date(1135022905196L),"0100000","errror message","sssssss"});
tableModel.addRow(new Object[]{"8949344562","0324354549",new Date(1134511763683L),"0166600","errror mes666e","ddddddd"});
setStatusMessage("ready to process, select record and click Process button to process record");
errorOcurred = false;
} catch (Exception ex) {
errorOcurred = true;
ex.printStackTrace();
} // End try
private void process_actionPerformed(ActionEvent e) {
try {
if(theTable.getSelectedRows().length > 0) {
// processThread = null;
// processThread = new theProcess(this);
// processThread.start();
processnow();
System.out.println("........finished now.........");
} else {
} catch (Exception ex) {
ex.printStackTrace();
public void processnow() {
try {
int[] selectedRows = null;
int totalSelected = 0;
setStatusMessage("processing " + totalSelected + " selected records...");Thread.sleep(1500);
selectedRows = theTable.getSelectedRows();
totalSelected = selectedRows.length;
for(int i = 0; i < totalSelected ; i++){
setStatusMessage("processing " + (i+1) + " of " + totalSelected + " selected records...");
System.out.println(".......................row: "+selectedRows);
Thread.sleep(2500);
System.out.println("........fins...........");
errorOcurred = false;
} catch (Exception ex) {
errorOcurred = true;
ex.printStackTrace();
} // End try
public void setStatusMessage(String message) {
statusMessage=message;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
if(image)
statusBar.setIcon(Image);
else
statusBar.setIcon(oImage);
statusBar.setText(statusMessage);
statusBar.update(statusBar.getGraphics());
public static void main(String[] args){
new thePanel();
} // class
package label;
import java.lang.Runnable;
public class theProcess implements Runnable {
private thePanel parent;
public theProcess(thePanel xparent){
parent = xparent;
} // end constructor
public void start() {
try {
Thread thisThread = new Thread(this);
thisThread.start();
thisThread.join();
} catch(Exception ex) {
ex.printStackTrace();
} // end method (start)
public void run(){
try {
parent.processnow();
} catch (Exception ex){
ex.printStackTrace();
} // end try
} // end method (run)
} // end class -
Waiting the main thread till all child thread has completed
I am in the process of developing a batch application in Java 5.0 which extensively uses the java.util.concurrency API. Here is a small description of what the batch process will do,
1. Retrieve values from DB and populate a blocking queue in main thread.
2. Instantiate a Threadpool by calling, Executors.newFixedThreadPool(2)
3. Invoking the following block of code from the main thread,
while(!iBlockingQueue.isEmpty()) {
AbstractProcessor lProcessor = new DefaultProcessor((BusinessObject)iBlockingQueue.remove());
iThreadPool.execute(lProcessor);
}DefaultProcessor is a class that extends Thread.
4. Invoking the following block of code from the main thread,
iThreadPool.shutdown();
try {
iThreadPool.awaitTermination(30, TimeUnit.SECONDS);
} catch (InterruptedException interruptedException) {
iLogger.debug("Error in await termination...", interruptedException);
Since, this is the first time I am using the java.util.concurrency API, I want to know whether this is the right way to wait for all the child threads to complete before executing further statements in the main (parent) thread. Or do I necessariliy have to call join() to ensure that the main thread waits for all the child threads to finish which can only happen when the queue is empty.
Please note here that as per the requirements of the application the blocking queue is filled only once at the very beginning.
I will appreciate any inputs on this.
Thanks.looks like you would be waiting on a queue twice, once in the loop and again, under the hood, in the threadpool's execute()
the threadpool's internal queue is all that is needed
if your iBlockingQueue is also the threadpool's internal queue, you might have a problem when you remove() the BusinessObject
by making DefaultProcessor extend Thread you are, in effect, implementing your own threadpool without the pooling
DefaultProcessor need only implement Runnable, it will be wrapped in a thread within the pool and start() called
to implement a clean shutdown, I suggest writing DefaultProcessor.run() as an infinite loop around the blocking queue poll(timeout) and a stop flag that is checked before going back to poll
class DefaultProcessor implements Runnable {
private BlockingQueue myQ;
private boolean myStopFlag;
DefaultProcessor( BlockingQueue bq ) { myQ = bq; }
public void run() {
BusinessObject bo = null;
while( !myStopFlag && (bo=myQ.poll( 10, SECONDS )) ) {
// business code here
public void stop() { myStopFlag = true; }
} Now, after iThreadPool.shutdown(), either call stop() on all DefaultProcessors (or alternatively send "poison" messages to the queue), and give yourself enough time to allow processing to finish. -
Waiting for a thread to die.
Hello, I hope you can help me...
I am writting a jdk1.4.1 Swing application that displays a small animation. This animation is processed from within a separate thread. My program makes a call starting this 'animation thread'. For practical reasons my program needs to wait for this thread to die (and thus the full animation to be shown) before it can continue. I am waiting for the animation thread to die using Threads 'join' method. However the problem with this is that I am forcing the GUI thread to wait resulting in the animation being calculated but not displayed. And so... how can I fix this... all I want is to wait until the animation is shown.
What I would like to do is:
1. Start animation;
2. wait intil animation has completed;
3. continue with program.
Any help or advice will be greatly appreciated.
Thank you in advance.Maybe this design could work for you. You divide your program into three parts running in three separate threads.
1. The main thread handling GUI stuff and coordination of the two other threads.
2. A working thread doing most of what the main thread is now doing.
3. The animation thread.
With this division of labour the working thread is waiting for the animation thread to finish (the main GUI thread isn't). The main thread will be free at all times to react to the users input or updating the screen or whatever, while the other two threads are cooperating to produce the animation. -
How to use Wait Screen and Thread?
Greetings,
I was wondering If I could ask a question...
Here it goes:
How can I use a Wait Screen in a MIDlet so that I can do the Following:
1.- Create and Open an Http Connection[b[i]](using an Object which extends Thread) in a Form by pressing an OKCommand.
2 .- Show the Wait Screen Until the Thread Object finishes execution(finishes whatever is inside run() method)
3.- Finally show the Result(s) of the Connection(bytes obtained from URL) in another Form.
First of all, Is what I ask even possible? and more importantly...
Can a Wait Screen actually Detect when a Thread finished execution? so that only when the thread finishes the program proceeds to the next statement?
Thank you very much in advance!
Sincerely, your friend,
JoseThank you very much Sir, I suppose that narrows it down a bit,
Because I definitely need my applications as standard as possible.
But good to know there's a way to do it.
Well, Thank you very much as usual!
Sincerely,
Keep up with the fantastic job you do every day!
God Bless.
J -
How to find out if a thread has finished execution?
Hi, Am new to multi-threaded programming. I have a question: I start a new thread from the main thread. This new thread has to update a swing component & thats it. How do I know when the new thread has finished its execution? Also, I need to kill the thread once it finishes its execution?..or will Java's GC take care of it? If I need to kill it from the code, how do I do it? I see that the destry() method of Thread class is deprecated.
Thanks.boolean isAlive()
Also, I need to kill the thread once it finishes its execution?..No
or will Java's GC take care of it? Yes
You can do Thread.join.
See the API docs and/or a threads primer. -
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. -
Hello, my engineer (Japanese) is trying to start AdobeMediaServer but he got stuck after getting "Waiting for another script to finish..." message. Any idea how to resolve this situation?
[root@NA1SIBZDH02 /opt/adobe/ams]# ./server start
NPTL 2.5
chmod: changing permissions of `./tmp/': 読み込み専用ファイルシステムです
Waiting for another script to finish...
[root@NA1SIBZDH02 /opt/adobe/ams]#
[root@NA1SIBZDH02 /opt/adobe/ams]#
[root@NA1SIBZDH02 /opt/adobe/ams]# ls -l
合計 52324
drwxr-xr-x 15 ams ams 4096 9月 11 17:54 Apache2.2
-rwxr-xr-x 1 root root 1061035 9月 11 17:54 License.htm
-rwxr-xr-x 1 root root 43374 9月 11 17:54 License.txt
-rwxr-xr-x 1 root root 58827 9月 11 17:54 ReleaseNotes.htm
-rwxr-xr-x 1 root root 5715 9月 11 17:54 adminserver
-rwxr-xr-x 1 root root 871 9月 11 17:54 adobe-lq.png
-rwxr-xr-x 1 root root 2912 9月 11 17:54 ams_icon.png
-rwxr-xr-x 1 root root 3220552 9月 11 17:54 amsadmin
-rw-r--r-- 1 root root 6 9月 11 17:54 amsadmin.pid
-rwxr-xr-x 1 root root 11187664 9月 11 17:54 amscore
-rwxr-xr-x 1 root root 4331472 9月 11 17:54 amsedge
-rwxr-xr-x 1 root root 3070840 9月 11 17:54 amsmaster
-rw-r--r-- 1 root root 6 9月 11 17:54 amsmaster.pid
-rwxr-xr-x 1 root root 5242 9月 11 17:54 amsmgr
drwxrwxrwx 6 ams ams 4096 9月 11 17:54 applications
-rwxr-xr-x 1 root root 960 9月 11 17:54 cleanup
drwxr-x--- 3 ams ams 4096 9月 11 17:54 conf
drwxr-xr-x 5 ams ams 4096 9月 11 17:54 creds
drwxr-xr-x 3 root root 4096 9月 11 17:54 documentation
-rwxr-xr-x 1 root root 16368842 9月 11 17:54 libadbe_dme.so
-rwxr-xr-x 1 root root 336065 9月 11 17:54 libadbe_flv.so
-rwxr-xr-x 1 root root 59248 9月 11 17:54 libasneu.so.1
-rwxr-xr-x 1 root root 71263 9月 11 17:54 libcares.so
-rwxr-xr-x 1 root root 71263 9月 11 17:54 libcares.so.2
-rwxr-xr-x 1 root root 71263 9月 11 17:54 libcares.so.2.0.0
-rwxr-xr-x 1 root root 1968482 9月 11 17:54 libcrypto.so.1.0.0
-rwxr-xr-x 1 root root 162403 9月 11 17:54 libexpat.so.1
-rwxr-xr-x 1 root root 3497472 9月 11 17:54 libfmsccme.so
-rwxr-xr-x 1 root root 6992879 9月 11 17:54 libhds.so
-rwxr-xr-x 1 root root 403767 9月 11 17:54 libssl.so.1.0.0
drwxr-xr-x 2 root root 4096 9月 11 17:54 licenses
drwxrwxrwx 2 root root 4096 9月 11 17:54 logs
drwxr-xr-x 5 root root 4096 9月 11 17:54 modules
drwxr-xr-x 6 root root 4096 9月 11 17:54 samples
drwxr-xr-x 3 root root 4096 9月 11 17:54 scriptlib
-rwxr-xr-x 1 root root 7494 9月 11 17:54 server
-rwxr-xr-x 1 root root 300864 9月 11 17:54 shmrd
-rwxr-xr-x 1 root root 36206 9月 11 17:54 tcSrvMsg
drwxrwxrwx 2 root root 4096 9月 11 17:54 tmp
drwxr-xr-x 9 root root 4096 9月 11 17:54 tools
-rwxr-xr-x 1 root root 2411 9月 11 17:54 uninstallAMS
drwxr-xr-x 8 ams ams 4096 9月 11 17:54 webroot
[root@NA1SIBZDH02 /opt/adobe/ams]#
[root@NA1SIBZDH02 /opt/adobe/ams]#
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーA possible cause is security software (firewall) that blocks or restricts Firefox or the plugin-container process without informing you, possibly after detecting changes (update) to the Firefox program.<br />
Remove all rules for Firefox from the permissions list in the firewall and let your firewall ask again for permission to get full unrestricted access to internet for Firefox and the plugin-container process and the updater process.
See:
* https://support.mozilla.com/kb/Server+not+found
* https://support.mozilla.com/kb/Firewalls -
Waiting for another script to finish...
I can no more start or stop FMS3 server, it says :
Waiting for another script to finish...
According to the start script, i check
/home/fms/tmp/script.lck and i have this file as empty, what should
i do then ?
Do you all have this file ? /home/fms/tmp/script.lck ?
JeromeMy reply is late i just read your problem after having the same, it locked up my whole Ubuntu system.
Its easy to solve just delete the lock folder you see. Server should restart and work fine. -
[JRockit] WARNING: could not open Unknown thread system flavour for reading
[JRockit] WARNING: could not open Unknown thread system flavour for reading, per-thread CPU usage can't be measured.
What are the reason of this warning?
Can I ignore this warning?
My system is: SLES9 SP3
(2.6.5-7.276.PTF.196309.1-bigsmp)
Pagesize = 1 075 080 972Which version of JRockit (java -version) ? Do you have LD_ASSUME_KERNEL set?
/Staffan -
Compressor 4.1.3 hangs Waiting for Create Disc to Finish
Compressor 4.1.3 hangs at the "Waiting for Create Disc to Finish" stage. The audio and video streams have been created and are in Finder. The correct drive has been selected in the Actions section and there is a disk in the drive. I have run Compressor Repair. However there is no activity at the drive (which otherwise works fine and will burn a disk from Finder). Anyone any ideas?
I'e not run into this before. Try a different clip – preferably a QuickTime movie. Bring that into Compressor and mark a short section with in and out points. Choose Hard Drive for Output Device in the Job Action section. What happens after you submit it?
Russ
Maybe you are looking for
-
Regarding select option in a module pool prog .
hello .. i need some help regarding select options in a module pool program .. i hav tried putting a select options in a module pool prog but i am not able 2 ... can any one tel me why select options r not aloowed in a module pool prog ?? and i read
-
Hello, We have created one materail , their Base unit of measure is "BOX" Checked the CUNI transaction, in that Decimal places field is "0' and Decimal place rounding filed "0" With reff to this material while creation of Purchase order system will
-
Barcode Separators for Acrobat Pro X
I'm trying to determine if Acrobat can produce its own barcodes for separator pages. Do I have to create my own barcodes in Forms or must I buy further software? I've got a small desk scanner and it doesn't look like my hardware (Kodak i2800) has i
-
Error: Deleted Tunes from Folder and Substitution of Old Tunes!
I surf Itunes evaluating songs I am considering buying. When I find one, I transfer the 30-second clip to a folder designated TOP TUNES. At the end of the week, I listen to the collection and make purchases. Two days ago, I opened Itunes and saw an e
-
How to utilize max use of DEBUG?
HI Expert's, Guru's and Sifu's As an abaper, i would like explore more on Debug. My questions are:- 1) What is the use of "desktop 3" ? 2) The use of break and watch point? 3) the use of Abap Stack? 4) the function of Variable 1, Variable 2, Loca