Are this threads running concurrently?

This is an example I reproduced from the Kathy&Bert's SCJP book.
public class Machinery implements Runnable{
     Operator operator;
     public Machinery(Operator operator){
          this.operator = operator;
     public static void main(String[] args){
          Operator o = new Operator();
          Thread operator = new Thread(o);
          operator.setName("Operator");
          Machinery m = new Machinery(o);
          Thread machine = new Thread(m);          
          machine.setName("Machine");
          machine.start();
          operator.start();                    
     public void run(){     
          for(int c=0; c<2; ++c){
               System.out.println("Machine...");
               synchronized(operator){
                    try{
                         System.out.println("Machine waiting...");
                         operator.wait(5000);                         
                         for(int i=0; i<3; ++i){                    
                              System.out.println("Machine processing...");
                              Thread.sleep(2000);
                    }catch(InterruptedException ex){
                         ex.printStackTrace();
class Operator implements Runnable{
     String name = Thread.currentThread().getName();
     public void run(){
          for(int c=0; c<2; ++c){
               // Line 44...
               System.out.println("Operator...");
               synchronized(this){                    
                    try{
                    for(int i=0; i<3; ++i){                         
                         System.out.println("Operator operating...");
                         Thread.sleep(500);
                    notify();
                    wait(100);
                    }catch(InterruptedException ie){ie.printStackTrace();}
}I don't know why after Operator notifies Machinery and get out of the synchronized code, the operator doesn't print the statement "Operator" on line 45 (there's a comment on line 44), I mean, this code is out of the synchronized block and since both threads are executing concurrently I thought it should print. I tried changing the Machinery's loop counter to 33 (to see if this was because of the scheduler "time slicing") so the "operator" line would print at least in between the machinery's loop print statements but I had no luck. Right now is as if both threads are running one at a time... I know I must be missing something here so if anyone can tell me what is I would really appreciate it.

In your Operator class you do this.
notify();
wait(100);So it notifies machinery and then waits 100 milliseconds. The wait releases the lock allowing machinery to do its thing. The key thing to note is that Operator is still in the synchronized block of code.
So basically, you don't see "Operator..." among the "Machine processing..." because the operator has to wait for Machinery to finish so that it may obtain the lock and exit the synchronized block.
This is assuming the program is running as you wrote it. It's completely legal for the System.out statements to be moved into the synchronized blocks without your knowledge.

Similar Messages

  • What happen when an error occur when there are 2 threads running ?

    Here is my execution :
    My MainSequence calls another sequence in a new thread. This sequence call a VI continuously
    When an error occur in the MainSequence, nothing happen : The step with the error in Mainsequence is still in execution state (with the arrow in front of it)  and the VI in my 2nd thread is still running. All I can't do is terminate all thread
    Is this behaviour normal ? What is the mean to solve this problem (maybe calling the 2nd sequence in a new execution ?)
    Thanks for your answer
    Laurent

    Each thread has its own error state. To get the results for a thread (including error result), you need to have a wait step which waits for it. If a thread has an error and you wait for it, you will get the error at the wait step that waits for it.
    If your main thread has an error and you want some worker thread to exit, you should add code to the cleanup of your main thread's sequence which signals the worker thread to exit (you should already have some sort of mechanism for signaling the worker thread to exit (there are many ways to do this, for example, a boolean variable passed by reference to the new thread's sequence, or a TestStand notification).
    If your main thread is getting an error, but is stuck inside a step, that problem is probably specific to something your code is doing, that is not the normal behavior of TestStand. You will need to provide more details or an example sequence in order for us to better understand what is happening.
    Hope this helps,
    -Doug

  • Running thread - which statement to get to know what this thread is doing

    Hallo,
    I have a thread in my database running.
    Normally the action I am doing with this thread lasts 1 hour. Now it is working for 3 hours.
    How can I get to know what my thread is doing and how long this will last? Which statement can I use?
    Thanks in advance, Jadexy

    This query shows what a session is doing:
    select s.sid
    ,(a.APPLICATION_WAIT_TIME / 1000000) as APPLICATION_WAIT_TIME
    ,(a.CONCURRENCY_WAIT_TIME / 1000000) as CONCURRENCY_WAIT_TIME
    ,(a.CLUSTER_WAIT_TIME / 1000000) as CLUSTER_WAIT_TIME
    ,(a.USER_IO_WAIT_TIME / 1000000) as USER_IO_WAIT_TIME
    ,(a.CPU_TIME / 1000000) as CPU_TIME
    ,(a.ELAPSED_TIME / 1000000) as ELAPSED_TIME
    ,a.ROWS_PROCESSED
    ,a.disk_reads
    ,a.buffer_gets
    ,a.direct_writes
    ,a.optimizer_mode
    ,a.sql_text
    from v$session s, v$sqlarea a
    where s.sid = &YOUR_SESSION_ID
    and a.sql_id = s.sql_id
    order by 1
    Times are shown in seconds.

  • Error: JavaFX runtime components are missing, and are required to run this

    I tried to build the application using javafx ant build, generated jar file. But when I run the jar file, issue:
    Error: JavaFX runtime components are missing, and are required to run this application.
    The javafx-class-path: libs/h2.jar libs/jfxrt.jar libs/log4j.jar
    Running the JAR file using:
    java -jar app.jar
    What could it be?

    Which version of iTunes?
    When you go to Programs control panel you can see as well as uninstall the current version.
    I always uninstall Bonjour, MobileMe etc and itunes will ask if I want to reinstall those (no thanks).
    itunes and many apps keep an installer cache so they can do a repair-reinstall without a full install again.
    I'd install Microsoft Security Essentials 2.0 which is free and excellent.
    Programs don't affect data. But if you don't have backups,  you are likely past due.
    If you have any doubts about the integrity of your system, if you have had to do a hard power down and likely do have issues, you should / could / might want to do chkdsk on your hard drive (hard drive properties tools scan for errors).

  • Will subsequent calls to an object running in a thread run in the thread?

    Hi,
    If I start a thread with an empty run method and then make a call to the object that I started in the thread, will the method call run in the other thread? For example:
    class ThreadClass implements Runnable {
        public void someMethod() {
        public void run() {
    class ThreadCaller {
        private ThreadClass threadClass;
        public ThreadCaller() {
            threadClass = new ThreadClass();
            Thread thread = new Thread(threadClass);
            thread.start();
        public blah() {
            threadClass.someMethod();
    }Will the method call in blah() run in the same thread as ThreadCaller, or will it run in the thread that was started in ThreadCaller's constructor?
    Thanks,
    Dan

    Djaunl wrote:
    vanilla_lorax wrote:
    Djaunl wrote:
    Is there a way to keep the thread alive until the object that started the thread is terminated,Objects don't get terminated. What do you mean?I want the thread to stay alive indefinitely until I arbitrarily terminate it makes more sense. The thread will stay alive until its run method completes. The canonical approaches are
    public void run() {
      while (!Thread.interrupted()) { // NOT isInterrupted()
        // do stuff
        // if you need to catch InterruptedException, do this:
        try {
        catch (InterruptedException exc) {
          Thread.currentThread().interrupt();
    }And then from another thread, call theAboveThread.interrupt() when it's time to stop. Read the docs in interrupt(), interrupted(), the interrupt flag, etc.
    OR
    while (!done()) {
      // do stuff
    }and then another thread calls setDone(true) or somesuch when it's time to stop. Note that all access to done--both get and set--must be synchronized, or done must be declared volatile. Also note that you may still have to handle interrupts, so you may have some repeated code with this approach--testing both done() and interrupted().
    Let me give the end-goal of this.
    Currently, I have a "main" thread which the user can input commands into, and another thread which occasionally runs in the background. When I want something to run in the background, I just create a new thread. However, I figured it'd be more efficient to have one thread running in the background to do something as opposed to spawning hundreds of new threads to do the same task over and over. If the task happens VERY frequently and what it does is VERY small and quick, then the overhead of thread creation may make this a valid approach. Otherwise, don't overcomplicate it. Since you're new to threads, first get it working where you spawn one thread for each background task. Then move on to thread pooling. Look into ThreadPoolExecutor and related classes.
    http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html

  • Can thread become a member of another thread  in Concurrent Programming

    i had this doubt in concurrrent programming,..........
    1)Can thread become a member of another thread in Concurrent Programming

    Threads are just objects that happen to have a special property:
    - when you invoke start() them the VM creates a new thread of execution to execute the Thread object's run() method
    A class that subclasses Thread is just a normal class and can have whatever members it like.
    Your questions don't make a lot of sense. If you are truly a "Novice in Java" then I recommend reading a few good books before you post in the forums.

  • The background thread running lazy writer encountered an I/O error

    Hi I have a test server which has thrown the following error
    File system error: A system error occurred while attempting to read or write to a file store. The system might be under memory pressure or low on disk space. Physical file: \\?\F:\MSAS11.DEPLOYAS\OLAP\Data\Prod_KCube.0.db\DIM Flags And Types.0.dim\3.Flag
    Types Key.khstore. Logical file: . GetLastError code: 8. File system error: The background thread running lazy writer encountered an I/O error. Physical file: \\?\F:\MSAS11.DEPLOYAS\OLAP\Data\Prod_KCube.0.db\DIM Flags And Types.0.dim\3.Flag Types Key.khstore.
    Logical file: . Errors in the OLAP storage engine: An error occurred while processing the 'Facts' partition of the 'Main Facts' measure group for the 'Prod_Cube' cube from the Prod_KCube database.
    The cube sits on a not very well maintained server which is used by various users (it is a test server) with the following specs
    Intel(R) Xenon(R) CPU x5690 @3.47GHz
    24GB Ram
    64 Bit operating system.
    The Cube data and logs are on separate drives and have plenty data but the C drive (where SQL Server is installed) only has3.5Gb of space left.
    It's a fairly big cube and I've managed to get it running by processing dimensions and facts bit by bit but errors when processed all together.
    What could be causing the errors above?

    Hi aivoryuk,
    According to your description, you get the lazy writing error when processing partitions. Right?
    In this scenario, the issue may cause by low memory for SSAS and lack of disk space. Please consider configure
    Server Properties (Memory Page) and increase
    memory setting for SSAS. If the .cub file is located in C drive, please reserve more disk space.
    Please refer to a similar thread below:
    https://social.msdn.microsoft.com/Forums/sqlserver/en-US/21bf84c5-f89a-464a-a5f1-2649fae5eb1e/while-processing-large-cubes-various-file-system-errors-the-background-thread-running-lazy-writer?forum=sqlanalysisservices
    Best Regards,
    Simon Hou
    TechNet Community Support

  • Why do threads run one at a time?

    [Newbie] Couldn't get help in another forum, so here goes. Tried this in Netbeans 3.5 then at home later in BlueJ, same thing. Thanks in advance!
    I have written a small application to play with threads. I create 3 instances of a class and shoot each one off in a thread, but they all seem to run one at a time, not at the same time. I have posted the code below. The output I expect is something like this:
    0T1
    0T2
    0T3
    1T1
    1T2
    1T3
    2T1
    2T2
    2T3
    498T1
    498T2
    498T3
    499T1
    499T2
    499T3
    500T1
    500T2
    500T3
    The T1 means threadstart1 wrote that line, the T3, means threadstart3 wrote the line, etc. I would expect to see these slightly out of order, too, knowing that the threads will process what they can, when they can. Instead, I see this:
    0T1
    1T1
    2T1
    500T1
    0T2
    1T2
    2T2
    500T2
    0T3
    1T3
    2T3
    500T3
    It's in perfect numeric order, each completing before the next starts. What am I doing wrong?
    //-------------dostuff.java
    package delme2;
    public class dostuff implements Runnable {
    private String mtext;
    public dostuff(String atext) {
    mtext = atext;
    public void run() {
    int j;
    String s;
    //display 500 numbers
    for (j=0; j<500; j++) {
    //build the string
    s = String.valueOf(j) + mtext;
    //show the string
    System.out.println(s);
    //wait a bit before doing this again.
    try {
    Thread.sleep(10);
    } catch (InterruptedException e) {
    //--------------- delme2.java
    package delme2;
    public class delme2 {
    public delme2() {
    System.out.println("Thread demo:");
    Runnable threadstart1 = new dostuff("T1");
    Runnable threadstart2 = new dostuff("T2");
    Runnable threadstart3 = new dostuff("T3");
    Thread t1 = new Thread( threadstart1 );
    Thread t2 = new Thread( threadstart2 );
    Thread t3 = new Thread( threadstart3 );
    t1.run();
    t2.run();
    t3.run();
    public static void main(String[] args) {
    delme2 mydelme2 = new delme2();
    }

    Okay, I'll play along. Having written a task scheduler in C (under tutorial, I admit), I think I qualify. A task scheduler has three jobs at all times.
    1) Execute the code at hand.
    2) Figure out when to stop executing the code at hand.
    3) When stopped, figure out what code to execute next.
    When executing a piece of code, there are different paradigms for determining when to stop and move on. Ideally, a cooperative multitasking system would have threads that relinquish timeslices or have some other method sprinkled throughout their code that indicates to the task scheduler that it's okay to move on to another piece of code. In my experience, that indicator is a Thread.Sleep() or equiavalent. when the thread.sleep() is encountered. The task scheduler has nothing to do for a whopping 10 MS. It could even take 15 or 20 ms if the next process in line takes that long. So what is it doing for 10 ms? It's not executing those other threads, which should be queued for their turn on step #3 as soon as I fire them off with a .run().
    Now, I hope you can see that I've given this some thought and read about it, but I'm missing something. I can get a very similar project to work as I expect it to in .NET and in Delphi. The Java environment has something different about it that I haven't figured out. Here's the c# code that does EXACTLY what I want it to. All threads run at a same time, and I get 0,0,0,1,1,1,2,2,2,3,3,3,4,4,4, etc.. See the similarities?
              private void button1_Click(object sender, System.EventArgs e)
                   lst.Items.Clear();
                   ThreadStart start1 = new ThreadStart(runner);
                   ThreadStart start2 = new ThreadStart(runner);
                   ThreadStart start3 = new ThreadStart(runner);
                   Thread t1 = new Thread(start1);
                   Thread t2 = new Thread(start2);
                   Thread t3 = new Thread(start3);
                   t1.Start();
                   t2.Start();
                   t3.Start();
              private void runner()
                   string s;
                   for (int j=0; j<500; j++)
                        s = j.ToString();
                        lst.Items.Add(s);
                        Thread.Sleep(10);
              }

  • No externally managed transaction is currently active for this thread

    Got the following exception after updating an entity bean and call persist method. Code the given below the exception.
    Exception [TOPLINK-23010] (Oracle TopLink - 10g Release 3 (10.1.3.0.0) (Build 060118)): oracle.toplink.exceptions.TransactionException
    Exception Description: No externally managed transaction is currently active for this thread
    public Object persistEntity(Object entity) {
    em.flush();
    em.persist(entity);
    return entity;
    private void modifyUser (Iuser user, String newHandle, Hashtable userDetails) throws UnknownException, WarningException {
    if (user == null) {
    throw new WarningException (new CatalogHelper("ITOOLS_000015", "to modify a user"));
    boolean handleUpdate = false;
    if ((newHandle != null) && !newHandle.equals("^\\s*$")) {
    handleUpdate = true;
    String oldHandle = user.getUserhandle();
    if (handleUpdate && oldHandle.equalsIgnoreCase(newHandle)) {
    handleUpdate = false;
    if (!handleUpdate && (userDetails == null) || (userDetails.size() == 0)) {
    return;
    if (handleUpdate) {
    userDetails.put("userhandle", newHandle);
    IToolsUtil.validateInputData("iuser", userDetails, false);
    if (handleUpdate) {
    userDetails.remove("userhandle");
    System.out.println("handleUpdate " + handleUpdate);
    // For User admin, handle, isactive, isadmin cannot be changed.
    if (oldHandle.equals("admin")) {
    if (handleUpdate) {
    throw new WarningException (new CatalogHelper("ITOOLS_000045", "Handle"));
    String active = (String)userDetails.get("isactive");
    if ((active != null) && !active.equals("Yes")) {
    throw new WarningException (new CatalogHelper("ITOOLS_000045", "Is Active"));
    String admin = (String)userDetails.get("isadmin");
    if ((admin != null) && !admin.equals("Yes")) {
    throw new WarningException (new CatalogHelper("ITOOLS_000045", "Is Admin"));
    System.out.println("user transaction started");
    if (handleUpdate) {
    FinderMethods fm = new FinderMethods();
    try {
    fm.findByUserHandle(em, newHandle);
    throw new WarningException (new CatalogHelper("ITOOLS_000043", newHandle));
    } catch (ObjectNotFoundException onfe) {
    user.setUserhandle(newHandle);
    System.out.println("User handle modified");
    } catch (SQLException se) {
    se.printStackTrace();
    throw new UnknownException (new CatalogHelper("ITOOLS_100000", new Object[]{"modifyUser", se.getMessage()}));
    String lname = (String)userDetails.get("userlname");
    if (lname != null) {
    user.setUserlname(lname);
    String fname = (String)userDetails.get("userfname");
    if (fname != null) {
    user.setUserfname(fname);
    String email = (String)userDetails.get("useremail");
    if (email != null) {
    user.setUseremail(email);
    String passwd = (String)userDetails.get("userpasswd");
    if (passwd != null) {
    user.setUserpasswd(passwd);
    String active = (String)userDetails.get("isactive");
    if (active != null) {
    user.setIsactive(active);
    String admin = (String)userDetails.get("isadmin");
    if (admin != null) {
    user.setIsactive(admin);
    System.out.println("details are updated");
    persistEntity(user);
    System.out.println("committed");
    How to resolve this issue? I am using Jdeveloper 10.1.3.0.4 (SU4)
    regds
    -raju

    The stack trace is given below. This exception is occured at "em.flush()" method. I even tried removing em.flush() method. Even then I got the same exception.
    I tried a different way of overcome this problem. Used UserTransaction instance say "ut" before create / modify the entity bean and later comitted. In that case I am not getting any exceptions. However, commit is happening only when new instance is created, commit works, but modification of an existing instance, commit is not working. Looks like there is some serious problem with EJB 3.0 in OC4J. Basic functionality is not working.
    Stack trace when flush method is called:
    Local Exception Stack:
    Exception [TOPLINK-23010] (Oracle TopLink - 10g Release 3 (10.1.3.0.0) (Build 060118)): oracle.toplink.exceptions.TransactionException
    Exception Description: No externally managed transaction is currently active for this thread
         at oracle.toplink.exceptions.TransactionException.externalTransactionNotActive(TransactionException.java:98)
         at oracle.toplink.internal.ejb.cmp3.transaction.base.JTATransactionWrapper.checkForTransaction(JTATransactionWrapper.java:39)
         at oracle.toplink.internal.ejb.cmp3.base.EntityManagerImpl.checkForTransaction(EntityManagerImpl.java:322)
         at oracle.toplink.internal.ejb.cmp3.base.EntityManagerImpl.getActiveUnitOfWork(EntityManagerImpl.java:314)
         at oracle.toplink.internal.ejb.cmp3.base.EntityManagerImpl.flush(EntityManagerImpl.java:164)
         at com.itools.vs.model.session.AdminSessionBean.persistEntity(AdminSessionBean.java:57)
         at com.itools.vs.model.session.AdminSessionBean.createUser(AdminSessionBean.java:124)
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:585)
         at com.evermind.server.rmi.RmiMethodCall.run(RmiMethodCall.java:53)
         at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
         at java.lang.Thread.run(Thread.java:595)
    Stack trace when persist method is called:
    Local Exception Stack:
    Exception [TOPLINK-23010] (Oracle TopLink - 10g Release 3 (10.1.3.0.0) (Build 060118)): oracle.toplink.exceptions.TransactionException
    Exception Description: No externally managed transaction is currently active for this thread
         at oracle.toplink.exceptions.TransactionException.externalTransactionNotActive(TransactionException.java:98)
         at oracle.toplink.internal.ejb.cmp3.transaction.base.JTATransactionWrapper.checkForTransaction(JTATransactionWrapper.java:39)
         at oracle.toplink.internal.ejb.cmp3.base.EntityManagerImpl.checkForTransaction(EntityManagerImpl.java:322)
         at oracle.toplink.internal.ejb.cmp3.base.EntityManagerImpl.getActiveUnitOfWork(EntityManagerImpl.java:314)
         at oracle.toplink.internal.ejb.cmp3.base.EntityManagerImpl.persist(EntityManagerImpl.java:74)
         at com.itools.vs.model.session.AdminSessionBean.persistEntity(AdminSessionBean.java:57)
         at com.itools.vs.model.session.AdminSessionBean.createUser(AdminSessionBean.java:123)
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:585)
         at com.evermind.server.rmi.RmiMethodCall.run(RmiMethodCall.java:53)
         at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
         at java.lang.Thread.run(Thread.java:595)

  • How to throw Exception in Thread.run() method

    I want to throw exception in Thread.run() method. How can I do that ?
    If I try to compile the Code given below, it does not allow me to compile :
    public class ThreadTest {
         public static void main(String[] args) {
         ThreadTest.DyingThread t = new DyingThread();
         t.start();
         static class DyingThread extends Thread {
         public void run() {
         try {
                   //some code that may throw some exception here
              } catch (Exception e) {
              throw e;//Want to throw(pass) exception to caller
    }

    (a) in JDK 1.4+, wrap your exception in RuntimeException:
    catch (Exception e)
    throw new RuntimeException(e);
    [this exception will be caught by ThreadGroup.uncaughtException() of this thread's parent thread group]
    In earlier JDKs, use your own wrapping unchecked exception class.
    (b) if you know what you are doing, you can make any Java method throw any exception using Thread.stop(Throwable) regardless of what it declares in its "throws" declaration.

  • Unable to run Concurrent Request from Trigger

    Hi All
    Lots of Forums out there on this but I can't resolve it.
    Trigger as below does not run concurrent program.
    CREATE OR REPLACE TRIGGER APPS.XXGL_PNL_CONTROL_snapshot
    AFTER INSERT OR UPDATE
    ON XXOBI.XXGL_PNL_CONTROL
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
    WHEN (
    NEW.STATUS ='APPROVED'
    declare
    l_errbuf varchar2(4000);
    l_retcode varchar2(4000);
    L_REQUEST_ID NUMBER;
    l_phase VARCHAR2 (240);
    l_status VARCHAR2 (240);
    l_dev_phase VARCHAR2 (240);
    l_dev_status VARCHAR2 (240);
    l_message VARCHAR2 (2000);
    l_call_status BOOLEAN;
    L_set_mode boolean;
    PRAGMA AUTONOMOUS_TRANSACTION;
    begin
    L_Set_mode := FND_Request.Set_Mode(TRUE);
    fnd_global.APPS_INITIALIZE (fnd_global.user_id,fnd_global.resp_id,fnd_global.resp_appl_id);
    l_request_id := fnd_request.submit_request(application => 'RMB GL',
    program => 'XXGLBSSNAP',
    argument1 => :NEW.CALENDAR_DATE,
    argument2 => :NEW.PNL_ROLLUP
    commit;
    end;
    If I remove the commit I get the following error
    active autonomous transaction detected and rolled back
    Cause: Before returning from an autonomous PL/SQL block, all autonomous transactions started within the block must be completed (either committed or rolled back). If not, the active autonomous transaction is implicitly rolled back and this error is raised.
    Action: Ensure that before returning from an autonomous PL/SQL block, any active autonomous transactions are explicitly committed or rolled back. ----------------------------------------------------------------------- 06520 through 06529 reserved for Foreign function errors
    Any help would be hugely appreciated
    Nicki

    after fnd_request.submit_request you must use - commit
    try change you code
    CREATE OR REPLACE TRIGGER APPS.XXGL_PNL_CONTROL_snapshot
    AFTER INSERT OR UPDATE
    begin
       cp_run(
                :NEW.CALENDAR_DATE...
    end;
    CREATE OR REPLACE PROCEDURE  cp_run (
           ... p_date indate ...
        IS
           PRAGMA AUTONOMOUS_TRANSACTION;
    l_request_id := fnd_request.submit_request(application => 'RMB GL',
    program => 'XXGLBSSNAP',
    argument1 => p_date
    commit;
    ...for example http://www.java2s.com/Tutorial/Oracle/0560__Trigger/MarktriggerwithPRAGMAAUTONOMOUSTRANSACTION.htm

  • How to pass the caught exception in Thread.run back to the main program?

    I have following three Java files (simplified from a real world application I am developing, see files at the end of this posting):
    1. ThreadTest.java: The main program that invokes the Manager.run()
    2. Manager.java: The manager that creates a thread to execute the Agent.run() for each agent
    3. Agnet.java: The run() method can throw Exception
    My goal is twofold:
    1. To execute the run() method of an Agent in a thread (the reason for this is there are many Agents all managed by a Manager)
    2. To catch the exception thrown by Agent.run() in the main program, ThreadTest.main() -- so the main program can alert the exceptions
    My problem:
    Bottomline: I cannot pass the exception thrown by Agent.run() in the Thread.run() back to the main program.
    Explanation:
    The signature of Thread.run() (or Runnable.run()) is
    public void run();
    Since it does not have a throws clause, so I have to try/catch the Agent.run(), and rethrow a RuntimeException or Error. However, this RuntimeException or Error will not be caught by the main program.
    One work-around:
    Subclass the ThreadGroup, override the ThreaGroup.uncaughtException() methods, and spawn the threads of this group. However, I have to duplicate the logging and exception alerts in the uncaughtException() in addition to those already in the main program. This makes the design a bit ugly.
    Any suggestions? Am I doing this right?
    Thanks,
    Xiao-Li "Lee" Yang
    Three Java Files:
    // Agent.java
    public class Agent {
    public void run() throws Exception {
    throw new Exception("Test Exception"); // Agent can throw execptions
    // Manager.java
    public class Manager {
    public void run() throws Exception {
    try {         // <===  This try/catch is virtually useless: it does not catch the RuntimeException
    int numberOfAgents = 1;
    for (int i = 0; i < numberOfAgents; i++) {
    Thread t = new
    Thread("" + i) {
    public void run() {
    try {
    new Agent().run();
    } catch (Exception e) {
    throw new RuntimeException(e); // <=== has to be RuntimeException or Error
    t.start();
    } catch (Exception e) {
    throw new Exception(e); // <== never got here
    // ThreadTest.java
    public class ThreadTest {
    public static void main(String[] args) {   
    try {
    Manager manager = new Manager();
    manager.run();
    } catch (Throwable t) {
    System.out.println("Caught!"); // <== never got here
    t.printStackTrace();

    The problem is, where could you catch it anyway?
    try {
    thread.start();
    catch(SomeException e) {
    A thread runs in a separate, er, thread, that the catch(SomeException) isn't running within. Get it?
    Actually the Thread class (or maybe ThreadGroup or whatever) is the one responsible for invoking the thread's run() method, within a new thread. It is the one that would have to catch and deal with the exception - but how would it? You can't tell it what to do with it, it (Thread/ThreadGroup) is not your code.

  • Why are the threads start and terminate randomly?

    Hi there,
    I got the program below. I am wondering why are the threads start and terminate randomly? Everytime, I run the program, it produces different results.
    I know that these four threads have got same normal priority (should be 5), and under windows there is something called timeslice. Then these four threads rotate using this timeslice. How do we know what exactly the timeslice is in seconds? If the timeslice is fix, then why the results are ramdom?
    Thanks in advance!
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    package mythreadone;
    * @author Administrator
    public class MyThreadOne implements Runnable {
    String tName;
    Thread t;
    MyThreadOne(String threadName) {
    tName = threadName;
    t = new Thread(this, tName);
    t.start();
    public void run() {
    try {
    System.out.println("Thread: " + tName);
    Thread.sleep(2000);
    } catch (InterruptedException e) {
    System.out.println("Exception: Thread "
    + tName + " interrupted");
    System.out.println("Terminating thread: " + tName);
    public static void main(String args[]) {
    // Why are the threads start and terminate randomly?
    new MyThreadOne("1");
    new MyThreadOne("2");
    new MyThreadOne("3");
    new MyThreadOne("4");
    try {
    Thread.sleep(10000);
    // Thread.sleep(2000);
    } catch (InterruptedException e) {
    System.out.println(
    "Exception: Thread main interrupted.");
    System.out.println(
    "Terminating thread: main thread.");
    1. Firstly, I set in the main function:
    Thread.sleep(10000);
    and I run the program it gives:
    Thread: 1
    Thread: 4
    Thread: 2
    Thread: 3
    Terminating thread: 1
    Terminating thread: 3
    Terminating thread: 4
    Terminating thread: 2
    Terminating thread: main thread.
    BUILD SUCCESSFUL (total time: 10 seconds)
    Run it again, it gives:
    Thread: 2
    Thread: 4
    Thread: 3
    Thread: 1
    Terminating thread: 2
    Terminating thread: 1
    Terminating thread: 3
    Terminating thread: 4
    Terminating thread: main thread.
    BUILD SUCCESSFUL (total time: 10 seconds)
    And my question was why it outputs like this? It suppose to be:
    Thread: 1
    Thread: 2
    Thread: 3
    Thread: 4
    Terminating thread: 1
    Terminating thread: 2
    Terminating thread: 3
    Terminating thread: 4
    Terminating thread: main thread.
    BUILD SUCCESSFUL (total time: 10 seconds)
    Why these four threads start and finish randomly each time I run the program? I use Windows, suppose there is a timeslice (i.e. 1 second), these threads have the same priority. Then the threads should start and finish in turn one by one. Am I right?
    2. My second question is:
    When I change the codes in the 'main' function into:
    Thread.sleep(10000); -> Thread.sleep(2000);
    it gives me the results like:
    Thread: 1
    Thread: 4
    Thread: 3
    Thread: 2
    Terminating thread: main thread.
    Terminating thread: 1
    Terminating thread: 4
    Terminating thread: 3
    Terminating thread: 2
    BUILD SUCCESSFUL (total time: 2 seconds)
    Run it again:
    Thread: 1
    Thread: 2
    Thread: 3
    Thread: 4
    Terminating thread: 3
    Terminating thread: main thread.
    Terminating thread: 4
    Terminating thread: 2
    Terminating thread: 1
    BUILD SUCCESSFUL (total time: 2 seconds)
    I tried several times. The main thread always terminates before or after the first child thread finished.
    My question is why it doesn't output something like:
    Thread: 1
    Thread: 2
    Thread: 3
    Thread: 4
    Terminating thread: 3
    Terminating thread: 4
    Terminating thread: 2
    Terminating thread: main thread.
    Terminating thread: 1
    BUILD SUCCESSFUL (total time: 2 seconds)
    or
    Thread: 1
    Thread: 2
    Thread: 3
    Thread: 4
    Terminating thread: 3
    Terminating thread: 4
    Terminating thread: 2
    Terminating thread: 1
    Terminating thread: main thread.
    BUILD SUCCESSFUL (total time: 2 seconds)

    user13476736 wrote:
    Yes, my machine has multi-core. Then you mean that if I got a one core machine the result should always be:
    Thread: 1
    Thread: 2
    Thread: 3
    Thread: 4
    Terminating thread: 1
    Terminating thread: 2
    Terminating thread: 3
    Terminating thread: 4
    Terminating thread: main thread.
    BUILD SUCCESSFUL (total time: 10 seconds)
    ???No.
    >
    How to explain my second quesiton then? Why the main thread always terminates before some of the child threads end? Thanks a lot.

  • DON'T UPGRADE LION until you read this thread

    https://discussions.apple.com/thread/3197249
    You will see from this thread that many people who have upgraded to Lion (versus a clean install) have had a disasterous experience. For instance:
    I have lost count of how many times my computer has crashed in the last 3 weeks after not having a single full computer crash for years
    The overall speed/performance of the computer and every application slows to a crawl
    Programs "stop responding" for minutes on end and then work at a snail's pace when they come back
    You can see from the thread that the problem seems to be associated with Flash. Uninstalling flash helps but it means you can forget about Youtube and every other application/web site that requires it.
    From my own experience, I recommend you stay away from a Lion upgrade until this problem is fixed as it is extremely frustrating.  I don't know if people who have done a clean install have the sme problem.

    rtln wrote:
    I run FlashBlock and have no problems with YouTube. The videos are in h.264 also. I find it a much better experience. There are a few sites that use Flash effectively but for the most part I find Flash is used in poor design and tons of advertising. I'm happy to be rid of it.
    I am running 10.6 on my primary HD but did do an upgrade to 10.7 on an external HD so I could try it out. There are some things I really like in Lion but unfortunately there are also a LOT of things I do not like (LaunchPad, Spaces, conflicting touch gestures in every app, wasted time and resources on animated interfaces, ugly user interface in iCal, Mail, Addressbook etc.). The stability of Lion seemed fine though.
    I just bought a new MacBook Pro and so instead of migrating or transfering a clone I did a nice new Clean install of 10.6 (and all the updates) and my favorite apps (all newest updated versions) and after I ran a clone backup of that, I upgraded to 10.7
    Maybe that's the trick to updating.
    Excellent advice
    My recommended method, clone your internal to an external, install Lion on the external, when ready either physically interchange the drives or clone the external back to the internal.
    The external becomes one of your backup methods, it's already up to date.

  • Thread running in jvm or os

    pls tell me thread running in jvm or operating system

    pls tell me thread running in jvm or operating systemIIRC, unless you are using a very old JVM (e.g. pre 1.2) or are explicitly specifying green threads (which I believe was still possible even in 1.2?) then all threading using native threads. As mentioned above, the mapping between Java thread objects and the native threads is is highly dependent on the OS (especially when it comes to thread priority).
    This document goes into much more detail: http://java.sun.com/docs/hotspot/threads/threads.html
    - N

Maybe you are looking for

  • My iphone 5 touch screen seems to have a mind of its own. Please help

    My iphone 5 touch screen seems to have a mind of it's own. Whilst I am trying to type a text message it will quite often whilst i'm tapping on letters, typr different letters, or open up the edit messages to select and delete messages. The screen can

  • Trouble getting videos on my IPod

    I copied several movies to my computer, in MP4 format. When I try to get them on my IPod however, "not copied because the video format is not supported" comes up. What format is it talking about?

  • No Mailed Check received for My Return

    I returned 3 iphone 6 to the Apple Store at Los Gatos, CA on Oct 1, 2014 and I was promised to receive 3 mail checks before Oct 7th by the manager. However, I still have not received my checks today and since I have been relocated to another country,

  • Empty while-loop taking too much power

    Hi all! Would someone help me out with a better implementation of the below code. 'guard' is a class handling validation of users againt a database. I'm waiting for it to finish in an empty while loop in my GUI-class (extending JFrame). This obviousl

  • Merging PDFs

    I think I remember that Preview in 10.5 has the ability to merge pdf files, but I can't figure out how to do it. Can somebody tell me?