Calling a Function in new thread

Hi,
I am New to java, i wrote a class it has some functions ,now i want to call one of its function in from another of its methods in new thread, how can i do it.
Scenario is :
Classs A extends thread
function One()
Thread new = new Thread(functionTwo());
Function Tow()
but it i snot allowing me to call that function

Naseerqau wrote:
I am New to java, i wrote a class it has some functions methods,
now i want to call one of its function methods in from another of its methods in new thread, how can i do it.This demonstrates how you run something in a thread.
I am guessing any Java tutorial on threads will have something like it.
class Naseergau {
    Naseergau() {}
    void method1() throws Exception {
        for(int i=1;i<10;++i) {
            System.out.println("In method1()");
            Thread.sleep(20L);
    void method2() throws Exception {
        for(int i=1;i<10;++i) {
            System.out.println("In method2()");
            Thread.sleep(20L);
    public void runSerial() {
        System.out.println("Start runSerial");
        try {
            method1();
            method2();
        } catch (Exception ex) {
            ex.printStackTrace();
        System.out.println("End runSerial");
    public void runParallel() {
        System.out.println("Start runParallel");
        Thread t1 = new Thread(new Runnable() {
            public void run() {
                try {
                    method1();
                } catch (Exception ex) {
                    ex.printStackTrace();
        t1.start();
        Thread t2 = new Thread(new Runnable() {
            public void run() {
                try {
                    method2();
                } catch (Exception ex) {
                    ex.printStackTrace();
        t2.start();
        try {
            t1.join();
            t2.join();
        } catch (Exception ex) {
            ex.printStackTrace();
        System.out.println("End runParallel");
    public static void main(String[] arg) {
        Naseergau n = new Naseergau();
        n.runSerial();
        n.runParallel();
}

Similar Messages

  • Calling sequence in a new thread multiple times gives debug warning "reference not released properly"

    Hi,
    I am including steps inside a sequence which calls sub sequences in a new thread. After calling each sub sequence in a new thread, I am putting Wait step which is configured to wait for the respective sub seueqnce to complete its execution. When I include these steps (call a subsequence in a new thread and then configuring wait to complete it) once, it executes properly but when I includes these steps twice, I get debug warning when I close Teststand sequence editor. Due to this behaviour, when I run this sequence through operator interface (Simple OI), I get run time error R6025.
    I checked if there is any object reference which might not be released, but could not figure it out here. Please see attached sequence and the debug warning message.
    Used version: Teststand 4.0.1, LabVIEW 8.5, Windows XP
    Kindly help.
    Thanks in advance,
    Nirmal
    Attachments:
    Sequence_new_thread2.seq ‏37 KB
    Debug Warning2.JPG ‏34 KB

    Hi Nirmal,
    Thanks for the detailed instructions. I tried exactly what you said and I still do not see the leak. The problem is likely specific to something customized on that machine or in the very least does not happen every time or on all machines. I'd recommend trying to narrow down by eliminating the possibility of an unintended customization. If you can try installing a clean install of teststand on a clean machine and see if you can still reproduce the problem then that would help narrow things down a little. If you can't reproduce it on a clean install on a clean machine then I'd start looking at what's different on the machine you can reproduce it on. You could remove your config files to eliminate customizations to settings such as search directories. You could remove files from your components\User directory to eliminate the possibility of using those. Just a few ideas. Other people might have some other ones.
    -Doug

  • Reapeatdly calling a function in a thread

    Hi,
    I'm facing an issue, i need to call a function after every 10 seconds in a thread.
    I'm not sure if i can use SIGALRM in this case or SELECT.
    Please suggest , how this can be efficienlty achieved.
    Thanks

    There are 2 things that you have to implement:
    1. create a thread
    2. write a loop, that will do sleep(10) and call the function
    I suppose you know how to create a thread, so to answer
    your question here is a simple program, that sleeps 10
    seconds and calls function f1().
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #define TEN_SECONDS  10
    int f1(int i) {
        return system("date");
    int main(int argc, char**argv) {
        int i;
        for (i = 0; i < 5; i++) {
            sleep(TEN_SECONDS);
            f1(i);
        return 0;
    }Thanks,
    Nik

  • Call function creatung new task

    Hi friends,
    I am running f110 in background...I have a Z function module which runs in update task....Insoide the z function module i have another rfc enabled function module where the updating of the docs is taking place....i am not able to get into the code of third fm through debugging...I have covered max scenarios of debugiing session external update system but none is fruitfull.
    also,i have put infinite loop to see in sm50 ...there also i dont have rights...
    could somebody tell me ow i get into the code through debugging
    kanishak

    Hi Kanishak,
    if you call the function creating NEW TASK, you won't get to debugger easily: The function is enqueued in a TRFC queue which you could stop - but as you are not allowed SM50 you won't be allowed TRFC  queue administration.
    If you are allowed to use transaction SAAB, you can create and activate a checkpoint group. Use statement LOG-POINT to record contents of some program fields. Then you can see what is happening in background of background.
    Regards,
    Clemens

  • Call Java function from multithreaded VC++ application

    Friends, I want to call Java function from two threads of a single VC++ application. I can call it from single thread but when I call it from another thread also, JNI_CreateJavaVM() replies with an error.
    Please......help me

    Your posting is ambiguous. My impression is that you have two threads, both trying to create a java VM?

  • How can I create a new thread to run PulseOutput.VI

    Hi:
      I use NI-94729(cDAQ system) to generate pluse and want to output  pulse continuously and to check the pulse is 500Hz.
      In TestStand, the steps as follow:
      1: Call PulseOuput.vi to generate 500Hz pulse, VI use Finite Mode to generate pulse.
      2: Verify the pulse is 500Hz.
     Howerver, after the first step finishes, the pulse output stops, te 2nd step is failed. If a Continuous Mode is used in PulseOuput.vi to generate pluse, the 1st step can't finish.
    Thanks a lot!

    Hello MotionBoy,
    There are two ways to go about creating a new thread to run a step.  The first is to create a new sequence, into which you put the LabVIEW step you want to run and any other steps that may go along with it.  Then use a sequence call step to call this newly created sequence.  Set the Execution Options of the Sequence call step to 'Use New Thread.'  This will allow you to run a set of steps in a new thread, not just a VI.  The second method, which is only available for a LabVIEW VI, is to use the “Run VI Asynchronously” step.  This can be accessed if you right-click within your sequence and select Insert Step » LabVIEW Utility » Run VI Asynchronously.  This step will allow you to call a VI and have it automatically open in a new thread.  You can further customize this step by opening the configuration menu in the Step Settings.
    To address the current behavior of your steps I would like to know if the modules in steps 1 & 2 pass data between them or it would be desirable for them to do so?  If so you are going to need a more complex synchronization structure such as TestStand/LabVIEW queues. There is a simple example you may want to look at in the TestStand examples, under the Synchronization folder that demonstrates how to use queues. Otherwise the above solution should be all you need.
    John B.
    Applications Engineer
    National Instruments

  • I am trying to have some LabVIEW code called in a New thread exit when the testStand sequence terminates

    I have a Sequence that launches a sequence in a New Thread that happens to launch some LabVIEW code.  The problem is when the LabVIEW code finishes, it will not close even when the TestStand sequence terminates. Is there a way to tell this LabVIEW code to Exit, I've tried the Quit LabVIEW function, but that causes a C++ RunTime Error.  The LabVIEW code does end though, and it is set in the VI properties to:
    Checked - Show Front Panel When Called
    Checked - Close Afterwardds if originally closed
    The sequence call that the LabVIEW code is launched from has the following options:
    - New Thread
    Unchecked - Automatically wait for the thread to complete at the end of the current sequence
    Unchecked - Initially Suspended
    Unchecked - Use single threaded apartment
    Any clues on this would be appreciated.

    Hi ADL,
    Everything should close correctly if you check the checkbox "Automatically wait for the thread to complete at the end of the current sequence" in the thread settings.
    With it unchecked, I am seeing the behavior you are. 
    Gavin Fox
    Systems Software
    National Instruments

  • CALL FUNCTION STARTING NEW TASK  DESTINATION

    Hi All,
    I have tried to use CALL FUNCTION 'ZWHV_TEST' STARTING NEW TASK 'TEST' DESTINATION 'NONE' But it didnt work.
    Please explain me  to use above statement and detail me more about NEW TASK 'TEST'.
    How to declare TEST in new task ?
    Thanks ,
    Vinay.

    >
    Vinay parakala wrote:
    > ...But it didnt work.
    Moderator message - Give more information please in a new thread - post locked

  • Call in process VM from new Thread

    Hi!
    I have a c++-Project that creates a jvm in the main-Thread. Then a new thread is created. In the new thread I'm calling a Java-function ( packageFoo.ClassFoo.fooFunction() in foo.jar).
    The function (fooFunction) is executed correctly until a point where an other class of an other package (in an other jar-file) (packageBar.ClassBar in bar.jar) is to be created. Here a ClassNotFoundException is thrown ("ClassNotFoundException: packageBar/ClassBar").
    The ClassNotFoundException is not thrown if I call fooFunction out of the thread where the JVM is created.
    The new Thread is registered with AttachCurrentThread and System.getProperty("java.class.path"), called directly before the exception is thrown, seems to be ok.

    hi once again.
    after some hours of searching:
    The problem does't depend on classpath etc. but on jndi:
    I can instance packageBar.classBar without problems directly. But classFoo.fooFunction uses JNDI.
    I also found a bug-report:
    http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4307751
    and a discussion whit a similar problem
    http://forum.java.sun.com/thread.jspa?forumID=40&threadID=432365
    where it is said that the context classloader should be reset to solve the problem.
    Well, I dont know to what to reset the classloader. I tried to save the classloader from thread A and set it in thread B but it didnt work so surely I did something wrong. Can somebody help me?

  • Teststand New Thread VS LabVIEW "Call & Forget" Asynchronous call

    Hi everyone,
    Here is an example taken from the ni.com website showing how to use LabVIEW to post a TestStand Notifier.  I have modified the example to fit the situation I needed to use it for.  I have an example which works fine (When I use a TestStand new thread to launch the Notifier VI) and an example which does not work (When I use a LabVIEW "Call & Forget" Asynchronous call to launch the Notifier VI).
    I would like to understand why it doesn't work in the second situation. The reason why I would prefer the 2nd situation which currently doesn't work is that I try to eliminate all multi-threads from an obsolete sequence written by someone else a few years ago so that I can troublesoot it and update the code to make it work with today's new reality.
    Also, for my personal knowledge.  I don't understand why the second strategy doesn't work.  The Testsand notifier reference is the same and hadled the same way.  I have included my example files with the 2 situations in seperate sequences files.
    Thanks in advance to the person who will be able to enlight me.
    Nien 
    Solved!
    Go to Solution.
    Attachments:
    New Thread Or Dynamic Call.zip ‏41 KB

    Hello Nien,
    This isn't a TestStand issue.  I suggest you take this to the LabVIEW forum.  Looking over your code your Notifer and Forget.vi is dependent on the notifier.vi.  So it's not necessarily anything wrong with the sequence steps but actually within your LabVIEW code itself.  One suggestion is to insert a simple error handler.vi in your Call Notifier and Forget.vi.  You have error wires connected to the functions itself, which is good practice but you don't have anything to inform you if an error occurs or not.  I would suggest you to run try to debug your LabVIEW code, such as using highlight execution, while you're running your code so you know where exactly the error is happening.  
    Thanks,
    Jonathan R.
    Applications Engineer
    National Instruments

  • Parallel Processing Issue : call function starting new task

    Hi
    I am using the parallel processing functionality using the call function new task  destination in group default  Performing    on end of task  inside a loop ( i am splitting the internal table )
    However when i am debugging the code, i am able to see the function module( it opens a new session in debugging ) ,  and i see that new task is started after the RFC Function module is executed .
    How is this parallel processing ? I mean the new task starts after control returns back to main program , after the execution of the RFC FM.
    I thought the idea was to have the same FM executing in multi threads. So that time is saved.

    Thanks for the answers.
    There were too many  complications in the 'call function in new task '  option.
    So we are trying it with the job submit option. So we are splitting up the data into smaller tables and submiting it with this statement : Submit  'prog' with selection-table 's_sel' via job 'job' and return .
    Thanks

  • Window doesn't close wheh Call Library Function Node set to Run in Any Thread

    This is a problem regarding Call Library Function Nodes running in the UI thread or any thread.
    I have a camera which has its own API supplied as a dll. I have created a set of VI wrappers which each call a function in the dll through a Call Library Function Node.
    Initially each CLFN was set to 'Run in the UI thread' (the default).
    To start the camera streaming images I call (through a CLFN)
    ICubeSDK_Start(int CamIndex, Hwnd, ImgHandle, bool Preview, bool callback);
    If Preview = True then the image is displayed in a preview window.
    If ImgHandle = NULL a default preview window
    is used.
    In the CLFN definition I define:
    ImgHandle as a U32
    Preview as a I32
    To stop the camera streaming images I call
        ICubeSDK_Stop(int CamIndex)
    In the actual implementation I set ImgHandle = 0 (NULL) and Preview = 1 (true).
    This all works fine, and a preview window is opened and images displayed. When I call ICubeSDK_Stop the preview window is closed.
    However, I would prefer to set the CLFN to 'Run in any thread' because
    a) when run in the UI thread the preview window randomly gets sent to the back when I switch focus between open VI windows (presumably because it is in the same thread as the VIs)
    b) I don't want to put unnecessary stuff in the UI thread
    c) my (naive?) understanding is that it is safer to run in any thread
    So I have set all CLFNs to 'Run in any thread'
    When I do this the preview window opens OK, and behaves like any other non LabVIEW controlled window in terms of focus. But when I call ICubeSDK_Stop() the preview window does not get closed properly, it just shows a blank image. I can't close it manually, there is no X in the corner and no option to close it from the taskbar. To get rid of it I have to close the LabVIEW project it is spawned from, which often results in a crash. It does appear as a separate item in task manager but if I 'end process' it, LabVIEW closes (and often crashes) as well.
    If I change only the CLFNs that call the Start and Stop functions back to 'Run in the UI thread' then it all works fine again, except that the preview window gets sent to the back randomly as before.
    So, what do I have to do to get the preview window to close properly if I set the CLFN to 'Run in any thread'.
    Alternatively, is there a way to close the window programmatically (ie force it to close) after I have called ICube_Stop.
    Thanks
    DAve

    Hi Dave,
    The "Run In UI Thread"  switches from the thread the VIs currently executing in to the user interface thread. If you select "Run in Any Thread", the Call Library Function Node continues in the currently executing thread. By default, all Call Library Function Nodes run in the User Interface thread.
    Before you configure the Call Library Function Node to run in any thread, you have to make sure that the code is thread safe. Code is thread safe when it does not store any global data (e.g. global variables, files on disks, etc.), does not access any hardware, does not make calls to any functions, libraries or drivers that are not thread safe.
    Unfortunately, since you said that your DLL accesses hardware, it is not recommended to use "Run in Any Thread." This is probably why you are seeing the crash.
    If your preview window gets sent to the back you can programmatically bring it forward. Here is an example of how this can be done: http://decibel.ni.com/content/docs/DOC-4551
    If you want to completely close the window down you can do so as described in this link: http://digital.ni.com/public.nsf/allkb/81E9C144190​0FFCE8625748F0055DBB0?OpenDocument
    I also thought you might find this useful: http://zone.ni.com/devzone/cda/tut/p/id/3009
    I hope this helps.
    Regards,
    Mahdieh G
    Applications Engineer
    National Instruments UK&Ireland

  • How to call a sequence in a new thread from C++ dll

    Here is what I am trying to do:
    I implemented a dll that monitors network traffic, and it also supports message handlers that can be triggered when a specific message has been received. Essentially the receipt of a message is like an event causing additional code to be executed. What I need to do is have the message handler in the dll call/execute a sequence (either is the same sequence file that originally called the dll, or in a different sequence file). Also I want the sequence to be executed within the same execution object for the purpose of result collection and report generation. I am expecting the dll to have to launch a new thread to call a sequence because of the asynchronous nature of the message received event.
    There are easier ways to achieve the same result, but one of my goals is to make it easy for a test developer to configure a message handler, by having only one step in their sequence to configure the message handler. I want the rest to be transparent to the user.
    I am unsure about how to implement this feature, so I am asking for any examples, ideas, comments before I start trying things out.

    Assuming that I understand your question correctly, it would seem to be the best way to do this would be to pass the Execution object to the DLL (either through a direct pass of the Execution object or passing the sequence context, from which you can get the Execution).  Then simply call Execution.NewThread, specifying the SequenceFile object (accessible from Engine.GetSequenceFileEx) and then passing the Thread object out as an output.  Your sequence file in which your DLL is called could then simply have a Wait step which is configured to wait on that Thread object.  What happens in this case is that the results are collected for that thread (which is being executed asynchronously) and returned as the results for the Wait step.
    Although you are probably not using LabVIEW, I have attached an example of this in LabVIEW that might be helpful just for seeing the flow.
    Thanks,
    Andy McRorie
    NI R&D
    Attachments:
    thread_test.seq ‏32 KB
    testthread.vi ‏19 KB

  • Use of CALL FUNCTION - STARTING NEW TASK parameter_list.

    SELECT strt_code
                 city_code
                 commu_code
                 regiogroup
          INTO TABLE gt_adrstreet1
          FROM adrstreet
          FOR ALL ENTRIES IN gt_street_district
          WHERE strt_code EQ gt_street_district-strt_code.
    To optimize the performance of teh above query I am planning to use call function CALL FUNCTION - STARTING NEW TASK .....
    by spliting the above internal table gt_street_district into two internal tables and use the value of each internal table into two different queries and these queries will be put in call function - start new task ....so that these queries are run in different workprocess and thus improve the performance of the program.
    Can you please let me know if this would be a good option and also how to implement the same.
    Thanks.....

    >To optimize the performance of teh above query I am planning to use call function CALL FUNCTION - STARTING NEW TASK .....
    nonsense! You should not try parallel processing for a non-optimized SELECT statement.
    Better add the first key field of the WHERE condition as said above and check
    + whether the driver table is empfty
    + and whether there are duplicated entries
    ... And it is also a good idea to really use the SINGLE RECORD BUFFER, therefore you must write
    field-symbol:  <fs>  type ...
    LOOP AT gt_street_district ASSIGNING <fs>
       SELECT *
                    INTO TABLE gt_adrstreet1
                    FROM adrstreet
                    WHERE counrty =
                     AND       strt_code = <fs>-strt_code.
    ENDLOOP.
    Then it will be extremely fast!

  • Calling function in NEW TASK

    Hi,
    I am creating a program which calls a function, becuse the function gets list of 2000 employess and run for long time over the amount of employees i wrote "call function zxxxxx starting new task p_task_number...."
    My question is - how many tasks can i create ? can i run the function in 10 tasks (20 employees in each task)????
    thanks
    Elad

    Hi Diwakar,
    try CALL FUNCTION func STARTING NEW TASK task1 DESTINATION dest IN GROUP DEFAULT, this will enable to run FM in groups (parallel processing) and might help in performance as will itself take care of available Application server.
    Not true, you can call an FM(which needs to be RFC of course) just like below, and you would still achieve parallel processing, read IN GROUP for more details on when and where to use it.
    DATA: l_task TYPE char10.
    DO 5 TIMES.
      l_task = sy-index.
      CONDENSE l_task.
      CONCATENATE 'TASK' l_task INTO l_task.
      CALL FUNCTION 'ZTEST_CHEN' STARTING NEW TASK l_task.
    ENDDO.
    Regards,
    Chen
    Edited by: Chen K V on May 26, 2011 2:55 PM

Maybe you are looking for

  • Accounts payable table relationship.

    hi ,          i want how the for bseg-belnr is related to material  no  matnr please  if possible give me the details how fi and mm arerealted .

  • Best practices with LDIF Development for RBAC?

    I'm currently working on enforcing RBAC (Role Based Access controls) in OID that may be subject to change every few months. What I've currently been doing is writing LDIF files to make changes to the existing RBAC once the changes have been finalized

  • Runtimr error OBJECTS_OBJREF_NOT_ASSIGNED and Exception  CX_SY_REF_IS_INITI

    Hi All when I schedule any BDC pgm in Background by giving job name in SM36 . It is giving an runtimr error OBJECTS_OBJREF_NOT_ASSIGNED and Exception  CX_SY_REF_IS_INITIAL . Error analysis     An exception occurred that is explained in detail below.

  • CA Wily Interoscope Issue...No Dashboards Available

    Hi experts. We have installed Wily Interscope and configured it with our SOLMAN so that it can collect our Portal's Java Performance Data. But when I login to the Willy Website (using the URL...http://<SOLMAN HOST>:8081/webview/jsp/login.jsf;jsession

  • Setting Guided Procedure Task Due date in UWL

    All, Currently UWL is configured to show the tasks related to GP. My question is how do we set the "Due Date" in UWL task View ( remember i am not talking about Due Date tab in GP). I want that the task that gets posted in UWL should have a due date.