Question on example from "Java concurrency in practice"

"Java concurrency in practice" 14.9 listing ( [Orig here|http://www.javaconcurrencyinpractice.com/listings/ThreadGate.java] ):
+...The condition predicate used by await is more complicated than simply testing isOpen. This is needed because if N threads are waiting at the gate at the time it is opened, they should all be allowed to proceed. But, if the gate is opened and closed in rapid succession, all threads might not be released if await examines only isOpen: by the time all the threads receive the notification, reacquire the lock, and emerge from wait, the gate may have closed again. So ThreadGate uses a somewhat more complicated condition predicate: every time the gate is closed, a "generation" counter is incremented, and a thread may pass await if the gate is open now or if the gate has opened since this thread arrived at the gate...+
public class ThreadGate {
    private boolean isOpen;
    private int generation;
    public synchronized void close() {
        isOpen = false;
    public synchronized void open() {
        ++generation;
        isOpen = true;
        notifyAll();
    public synchronized void await() throws InterruptedException {
        int arrivalGeneration = generation;
        while (!isOpen && arrivalGeneration == generation) {
            wait();
Question:
Guys, could anyone explain me
1) the work of code in term of "thread T1 waits, thread T2 closes..." the part arrivalGeneration == generation is unclear?
2) Why both english and french editions say "every time the gate is closed, a generation counter is incremented"? How this is possible?
3) Give an example how "the gate may have closed again" ? How this is possible?
I posted this in other forums, but never had any explanations. Thanks.
Edited by: maxim_2004 on Jul 14, 2010 9:19 AM

Generation is a counter of how many times the gate has opened. We use it to determine if the gate has opened since a waiting thread arrived. The criteria for a waiting thread to proceed is not, "Is the gate open now?" but rather "Has the gate opened at least once since this thread started waiting?"
Say you have N waiting threads and one controller thread. When the controller thread calls open(), we want all N waiting threads to be able to proceed. But the controller thread may call close() at any time, and depending on when he calls close(), how many waiting threads there are (that is, how large N is) and how the scheduler on that JVM/OS is operating, the controller thread may call close() before all of the waiting threads have completed the await() method.
So a waiting thread may be stuck in the while loop call wait(), and by the time he has been notified, gets CPU cycles, acquires the lock, and goes back to test isOpen, the gate may have opened and closed. But we want him to be able to go, just because the gate did open. We don't care if he didn't get through before it closed again--he's supposed to be able to go anyway.
Therefore, we don't just wait if the gate is closed. We wait if the number of times it has opened is the same as when we arrived. In other words we wait only, if it hasn't opened since this waiting thread arrived.
Gate opens 1st time. (generation = 1)
Gate closes.
Gate opens 2nd time. (gen = 2)
T2 arrives. (arrivalGen = 2)
T2 calls wait()
Gate opens 3rd time. (gen = 3)
Gate closes.
T2 gets CPU time and lock. Executes while test. Gate is closed. BUT gen=3 and arrivalGen=2, so even though the gate is closed now, it has opened since T2 arrived, so T2 is allowed to proceed (arrivalGen != gen)
Edited by: jverd on Jul 14, 2010 10:05 AM
Edited by: jverd on Jul 14, 2010 10:08 AM

Similar Messages

  • How can i get the source code from java concurrent program in R12

    Hi 2 all,
    How can i get the source code from java concurrent program in R12? like , "AP Turnover Report" is java concurrent program, i need to get its source code to know its logic. how can i get its source code not the XML template?
    Regards,
    Zulqarnain

    user570667 wrote:
    Hi 2 all,
    How can i get the source code from java concurrent program in R12? like , "AP Turnover Report" is java concurrent program, i need to get its source code to know its logic. how can i get its source code not the XML template?
    Regards,
    ZulqarnainDid you see old threads for similar topic/discussion? -- https://forums.oracle.com/forums/search.jspa?threadID=&q=Java+AND+Concurrent+AND+Source+AND+Code&objID=c3&dateRange=all&userID=&numResults=15&rankBy=10001
    Thanks,
    Hussein

  • Need to call OAF API from JAVA concurrent program

    Hi Gurus,
    I am trying invoke an OAF Application method which generate the Batch ID. I am trying the invoke the same from JAVA Concurrent program. Below is teh code used,
    package oracle.apps.ego.item.cp;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.util.Hashtable;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import oracle.apps.ego.item.common.server.EgoBatchHeader;
    import oracle.apps.ego.item.itemimport.server.EgoImportBatchHeaderAMImpl;
    import oracle.apps.fnd.cp.request.CpContext;
    import oracle.apps.fnd.cp.request.JavaConcurrentProgram;
    import oracle.apps.fnd.cp.request.LogFile;
    import oracle.apps.fnd.cp.request.OutFile;
    import oracle.apps.fnd.cp.request.ReqCompletion;
    import oracle.jbo.ApplicationModule;
    import oracle.jbo.ApplicationModuleCreateException;
    import oracle.jbo.ApplicationModuleHome;
    import oracle.jbo.JboContext;
    import oracle.jbo.domain.Number;
    import oracle.jdbc.internal.OracleCallableStatement;
    public class XX_EGO_BATCH_CREATE implements JavaConcurrentProgram {
    static LogFile log = null;
    public void runProgram(CpContext ctx){
    //Obtain the reference to the Output file for Concurrent Prog
    OutFile out = ctx.getOutFile();
    EgoBatchHeader v_header = new EgoBatchHeader();
    //Obtain the reference to the Log file for Concurrent Prog
    log = ctx.getLogFile();
    log.writeln("Batch Number Creation", 0);
    ApplicationModule am = null;
    try{
    //Write your logic here
    log.writeln("Batch Number Creation", 0);
    log.writeln("definition of batch num",0);
    Number batch_num;
    Number ssid = new Number(10000);
    String jdbcUrl =
    "jdbc:oracle:thin:apps/[email protected]:10201:ARERP4";
    ApplicationModule am_Member = null;
    log.writeln("Before Calling Create method",0);
    am_Member =
    create("oracle.apps.ego.item.itemimport.server.EgoImportBatchHeaderAMImpl",
    jdbcUrl);
    log.writeln("assigning ssid"+ssid,0);
    EgoImportBatchHeaderAMImpl bheader = new EgoImportBatchHeaderAMImpl();
    log.writeln("bheader object is :"+bheader,0);
    log.writeln("calling getBatchObjectForCreate"+bheader,0);
    v_header = bheader.getBatchObjectForCreate(ssid);
    //System.out.println("v_header is :" + v_head);
    log.writeln("calling createBatch"+v_header,0);
    batch_num = bheader.createBatch(v_header);
    log.writeln("Batch Number is :"+batch_num ,0);
    out.writeln("This will be printed to the Output File");
    log.writeln("This will be printed to the Log File", 0);
    //Request the completion of this Concurrent Prog
    //This step will signal the end of execution of your Concurrent Prog
    ctx.getReqCompletion().setCompletion(ReqCompletion.NORMAL,"Completed.");
    //Handle any exceptional conditions
    catch(Exception e){
    log.writeln("Exception2 occurred here !!"+e,0);
    log.writeln("calling createBatch"+v_header,0);
    public static ApplicationModule create(String amDefName,
    String jdbcConnStr) throws ApplicationModuleCreateException, Exception {
    ApplicationModule am = null;
    try {
    OracleCallableStatement conn = null;
    // Setup the hashtable of JNDI initialization parameters
    log.writeln("inside create method .. ",0);
    Hashtable env = new Hashtable(2);
    env.put(Context.INITIAL_CONTEXT_FACTORY,
    JboContext.JBO_CONTEXT_FACTORY);
    env.put(JboContext.DEPLOY_PLATFORM, JboContext.PLATFORM_LOCAL);
    // Create an JNDI initial context
    Context ic;
    ic = new InitialContext(env);
    // Lookup a home interface (factory) for the AppModule by name
    ApplicationModuleHome home =
    (ApplicationModuleHome)ic.lookup(amDefName);
    if(home==null){
    log.writeln("home is null... .",0);
    }else{
    log.writeln("home is not null"+home,0);
    // Create an instance of the AppModule using the home/factory
    am = home.create();
    if(am!=null){
    log.writeln("am is not null"+am,0);
    }else{
    log.writeln("am is null",0);
    // Connect the application module to the database
    am.getTransaction().connect(jdbcConnStr);
    } catch (NamingException ex) {
    log.writeln("NamingException occurred here !!"+ex.getMessage(),0);
    ex.printStackTrace();
    throw new ApplicationModuleCreateException(ex);
    }catch(Exception ex){
    log.writeln("Exception occurred here !!"+ex.getMessage(),0);
    ex.printStackTrace();
    throw new Exception(ex);
    return am;
    I am not able to call the web server and facing issues. Please let me know if you can help me to get a solution to this.
    Thanks in advance
    Veerendra

    Hi Zafar,
    I got an error saying :
    Batch Number Creation
    Batch Number Creation
    definition of batch num
    Before Calling Create method
    inside create method ..
    home is not nulloracle.jbo.server.ApplicationModuleHomeImpl@11d2572
    Jul 9, 2008 5:04:21 AM oracle.adf.share.config.ADFConfigFactory findOrCreateADFConfig
    INFO: oracle.adf.share.config.ADFConfigFactory No META-INF/adf-config.xml found
    Exception occurred here !!JBO-25002: Definition oracle.apps.ego.item.itemimport.server.EgoImportBatchHeaderAMImpl of type ApplicationModule not found
    oracle.jbo.NoDefException: JBO-25002: Definition oracle.apps.ego.item.itemimport.server.EgoImportBatchHeaderAMImpl of type ApplicationModule not found
         at oracle.jbo.mom.DefinitionManager.findDefinitionObject(DefinitionManager.java:441)
         at oracle.jbo.mom.DefinitionManager.findDefinitionObject(DefinitionManager.java:358)
         at oracle.jbo.mom.DefinitionManager.findDefinitionObject(DefinitionManager.java:340)
         at oracle.jbo.server.MetaObjectManager.findMetaObject(MetaObjectManager.java:700)
         at oracle.jbo.server.ApplicationModuleDefImpl.findDefObject(ApplicationModuleDefImpl.java:232)
         at oracle.jbo.server.ApplicationModuleImpl.createRootApplicationModule(ApplicationModuleImpl.java:401)
         at oracle.jbo.server.ApplicationModuleHomeImpl.create(ApplicationModuleHomeImpl.java:91)
         at oracle.apps.ego.item.cp.XX_EGO_BATCH_CREATE.create(XX_EGO_BATCH_CREATE.java:139)
         at oracle.apps.ego.item.cp.XX_EGO_BATCH_CREATE.runProgram(XX_EGO_BATCH_CREATE.java:57)
         at oracle.apps.fnd.cp.request.Run.main(Run.java:157)
    Exception2 occurred here !!java.lang.Exception: oracle.jbo.NoDefException: JBO-25002: Definition oracle.apps.ego.item.itemimport.server.EgoImportBatchHeaderAMImpl of type ApplicationModule not found
    calling [email protected]9c

  • How to run another concurrent from Java Concurrent Program?

    Hi,
    I have one Java Concurrent Program in ebs R12.
    I need to run another Java Concurrent Program when first finished.
    I can not find a way to start another request from JCP.
    Thanks,
    ms

    Hi ,
    this is an example code to check the OS before running the command :
    try{
    int ch;
    Process proc ;
    Runtime r=Runtime.getRuntime();
    StringBuffer sbuf = new StringBuffer();
    String dir = new String();
    String osname = System.getProperty("os.name");
    if(osname.equals("Windows NT") )
    proc = r.exec("cmd /c dir");
    if(osname.startsWith("Linux") )
    proc = r.exec("df -k");
    InputStream is = proc.getInputStream();
    while((ch=is.read() ) != -1)
    sbuf.append((char)ch);
    is.close();
    dir = sbuf.toString();
    System.out.println(dir );
    }catch(Exception e){ System.out.println(e.getMessage());}
    bye
    Taha

  • PL/SQL log messages are not printing from Java concurrent program

    Hi,
    I have a strange issue while submitting the Java concurrent program through PL/SQL.
    I have a PL/SQL concurrent program which will invoke the Java concurrent program inside the package by use of "FND_GLOBAL.SUBMIT_REQUEST". It worked and submitted successfully. From that Java concurrent program we are calling some other PL/SQL packages and printing some log messages over there. But problem here is the request is only printing the Java log messages in view log but not the PL/SQL log messages.  But if I submit the Java concurrent program directly from SRS form at that it is printing both Java and PL/SQL log messages.
    I am just wondering how the log messages has not printed. Please provide your inputs to solve this problem.
    Thanks
    Suriya

    I'm adding log messages in the package body , but these messages are not printing after completion of concurrent prog.
    Any suggestions.
    FND_FILE.PUT_LINE(FND_FILE.LOG,'Data Test :');Do you have COMMIT in your code?
    https://forums.oracle.com/forums/search.jspa?threadID=&q=%27FND_FILE.PUT_LINE%27+AND+commit&objID=c3&dateRange=all&userID=&numResults=15&rankBy=10001
    Thanks,
    Hussein

  • Cal plsql pkg from Java concurrent program

    Hi,
    I try to execute one plsql pkg inside a java concurrent pgm.plsql code executed from view output i got the out put.Bt my status Shows ERROR.
    this is my code
    try{
    System.out.println("transation type inside try block "+deptno);
    CallableStatement cs=con.prepareCall("{call XX_ANE_DEPT2_PKG.XX_ANE_DEPT2_PRC(?,?,?)}");
    cs.setString(1,null);
    cs.setString(2,null);
    cs.setString(3,deptno);
    cs.execute();
    con.commit();
    cs.close();
    //LF.writeln("Generating Programs for Application : " + transactionType, LogFile.STATEMENT);
    //OF.writeln( " Available Concurrent Programs for Application " +transactionType );
    catch(SQLException ex){
    lRC.setCompletion(ReqCompletion.ERROR, ex.toString());
    finally
    pCpContext.releaseJDBCConnection();
    I dont knw why the status is error any one pls help.If it is wrong method any one pls give a sample pgm to cal a PKG in concurrent pgm.
    pls help
    Edited by: aneeshmathew on Dec 28, 2010 4:49 AM
    Edited by: aneeshmathew on Dec 28, 2010 4:49 AM

    Are you able run this concurrent program from form application.? if it erroring out there what error you are getting.
    Thanks

  • Error finding/creating AM from Java Concurrent Program

    Hi All,
    Here is what I am attempting to do in a Java concurrent program
    --------------- Code Start - Error description in the code snippet comments ---------------
    public void runProgram(CpContext pCpContext)
    DBTransactionImpl mDBTransactionImpl
    = new DBTransactionImpl(pCpContext.getJDBCConnection());
    OAApplicationModule am = null;
    // At this point I tried to call various methods on DBTransactionImpl
    // And each method call, causes the CP to error with a different exception
    // Calling findApplicationModule() causes the following exception
    // java.lang.NullPointerException
    // at oracle.jbo.server.DBTransactionImpl.findApplicationModule(DBTransactionImpl.java:4840)
    // at xxicon.oracle.apps.xbol.pa.cp.XXIconImportUnitsFrmXls.runProgram(XXIconImportUnitsFrmXls.java:101)
    // at oracle.apps.fnd.cp.request.Run.main(Run.java:161)
    am = mDBTransactionImpl.findApplicationModule(IMPORT_UNITS_AM_INS);
    // Calling createApplicationModule() causes the following exception
    // java.lang.NullPointerException
    // at oracle.jbo.server.DBTransactionImpl.createApplicationModule(DBTransactionImpl.java:4954)
    // at xxicon.oracle.apps.xbol.pa.cp.XXIconImportUnitsFrmXls.runProgram(XXIconImportUnitsFrmXls.java:109)
    // at oracle.apps.fnd.cp.request.Run.main(Run.java:161)
    am = mDBTrx.createApplicationModule( IMPORT_UNITS_AM_INS
         ,IMPORT_UNITS_AM_DEF);
    // Calling isConnected() causes the following exception
    // java.lang.NullPointerException
    // at oracle.jbo.server.DBTransactionImpl.isConnected(DBTransactionImpl.java:4335)
    // at xxicon.oracle.apps.xbol.pa.cp.XXIconImportUnitsFrmXls.runProgram(XXIconImportUnitsFrmXls.java:65)
    // at oracle.apps.fnd.cp.request.Run.main(Run.java:161)
    if (mDBTransactionImpl.isConnected())
    // Log the fact that DBTrx is connected
    --------------- Code End - Error description in the code snippet comments ---------------
    Would someone be kind enough to tell me what is it that I am doing wrong here?
    Thanks a ton!
    KH
    Message was edited by: Kiran
    kiran.k.hegde

    Kiran,
    How did you convert/cast the CpContext into an AppsContext to supply to createRootAM?
    Would you maybe share some more code?
    Update
    No need for that, a simple
    public void runProgram( CpContext ctx )
    String amName;
    String methodName;
    OAApplicationModuleFactory amF = new OAApplicationModuleFactory();
    OAApplicationModule am = amF.createRootOAApplicationModule( ctx, amName );
    am.invokeMethod( methodName );
    will do...
    Message was edited by:
    TyskJohan

  • Calling Web service from Java Concurrent Program

    Hi,
    I created a Java concurrent program and created executable. Here is my code.
        public void runProgram(CpContext ctx) {
            String value = "Java Concurrent Program Testing";
            Hello hell = new Hello();
            String returnValue = hell.testURL(value);
            if(returnValue.equalsIgnoreCase("TRUE")){
                ctx.getLogFile().writeln("-- Java Concurrent Program Testing --", 0);
                ctx.getOutFile().writeln("-- Java Concurrent Program Testing --");
                ctx.getReqCompletion().setCompletion(ReqCompletion.NORMAL, "");
            else{
                ctx.getLogFile().writeln("-- Hello World! --", 0);
                ctx.getOutFile().writeln("-- Hello World! --");
                ctx.getReqCompletion().setCompletion(ReqCompletion.NORMAL, "");
        }testURL() call the web service and get the response. but when I am selecting View Output option I am always geting out put as
    -- Hello World! --I tested the logic of calling web service. It giving me out put "true". Here is my Web service calling code
        public String testURL(String Value){
            HttpURLConnection httpConn = null;
            ByteArrayOutputStream bout = null;
            String setWebServiceURLResponse = "";
            String responseString="";
            String outputString = "";
            try{
                httpConn = getHttpConnection();
                bout = new ByteArrayOutputStream();
                String xmlInput = soapBodyStart +
                "<ns1:getTestURL>\n" +
                "            <ns1:URL>"+Value+"</ns1:URL>\n" +
                "        </ns1:getTestURL>"+
                soapBodyEnd;
                byte[] buffer = new byte[xmlInput.length()];
                buffer = xmlInput.getBytes();
                bout.write(buffer);
                byte[] b = bout.toByteArray();
                httpConn = setHttpConnectionRequest(b,httpConn);
                //Read the response.
                InputStreamReader isr = new InputStreamReader(httpConn.getInputStream());
                BufferedReader in = new BufferedReader(isr);
                //Write the SOAP message response to a String.
                while ((responseString = in.readLine()) != null) {
                    outputString = outputString + responseString;
                //Parse the String output to a org.w3c.dom.Document and be able to reach every node with the org.w3c.dom API.
                Document document = parseXmlFile(outputString);
                String formattedSOAPResponse = formatXML(outputString);
                System.out.println("Formatted response = \n" +formattedSOAPResponse);
                //NodeList nodes = document.getElementsByTagName("setWebServiceURLResponse");
                //NodeList nodes = document.getElementsByTagName("getTestURLResponse");
                 NodeList nodes = document.getElementsByTagName("ns0:getTestURLResponse");
                int len = nodes.getLength();
                System.out.println("Inside testURL Node Lenght  = "+ len);
                for(int s=0; s<nodes.getLength() ; s++){
                    Node authenticateResultNode = nodes.item(s);
                    if(authenticateResultNode.getNodeType() == Node.ELEMENT_NODE){
                        Element authenticateResultElement = (Element)authenticateResultNode;
                        //NodeList authenticateResultValueNode = authenticateResultElement.getElementsByTagName("ns0:return");
                        //NodeList authenticateResultValueNode = authenticateResultElement.getElementsByTagName("return");
                         NodeList authenticateResultValueNode = authenticateResultElement.getElementsByTagName("ns0:return");
                        Element authenticateResultValue = (Element)authenticateResultValueNode.item(0);
                        NodeList textFNList = authenticateResultValue.getChildNodes();
                        //System.out.println("Authenticate Result : " + ((Node)textFNList.item(0)).getNodeValue().trim());
                         setWebServiceURLResponse = ((Node)textFNList.item(0)).getNodeValue();
                         //System.out.println("Authenticate Response in getAuthenticate method : " + authenticateresponse);
                    }//end of if clause
                }//end of for loop with s var
                System.out.println("Inside setWebServcieURLToFile response = " + setWebServiceURLResponse);
            catch(Exception e){
                e.printStackTrace();
            return setWebServiceURLResponse;
        }Where I am going wrong ?
    Regards,
    Ajay Sharma

    sample code:
    static string url = "http://my.webservice.url"; ---------------> The actual web service URL
    Call = new Call(url); --------------------------------------------------> The call object used by JAX-RPC
    Object[] params = new Object[]{param1, param2};---------> build the call parameters
    Boolean/Integer/Whatever result = call.invoke("method name", params);------>call the invoke method to get the result

  • Simple Question Calling methods from Java files through JSP without JVM

    Hi.
    I've got a simple question (forigve my newbieness)...
    If I'm running Tomcat can I exectue a method in a compiled Java file from a JSP page without having the JVM installed on the server?
    Any thoughts or additional comments would be appreciated.
    Many thanks.

    No... but that's because you can't run Tomcat without
    a JVM installed on the server.
    If you are running Tomcat, you are running a JVM for
    the JSP pages to run in, in which case, yes, the JSP
    pages can call the other Java code... as long as it's
    in the classpath.Thanks a lot for the replies.
    So just to check, if I sign up with a hosting company that offers Tomcat then the JVM will be installed on the server and I can call other Java code as long as it's in the classpath?
    I just want to make sure before I sign up with a hosting company =D
    Thanks again!

  • Compile questions about example " DrawTest.java"

    i install the j2sdk1.4.0 with windows98 operations system.
    i want to recomplie the examples in c:\j2sdk1.4.0\demo\applets\DrawTest
    javac DrawTest.java
    12 errors occur as following:
    DrawTest.java:185: cannot resolve symbol
    symbol : variable orange
    location: class Color
    b.setForeground(Color.orange);
    ^
    DrawTest.java:188: cannot resolve symbol
    symbol : variable black
    location: class Color
    b.setForeground(Color.black);
    ^
    DrawTest.java:194: cannot resolve symbol
    symbol : variable lightGray
    location: class Color
    shapes.setBackground(Color.lightGray);
    ^
    DrawTest.java:200: cannot resolve symbol
    symbol : variable lightGray
    location: class Color
    g.setColor(Color.lightGray);
    ^
    12 errors
    how to solve this problem?
    thanks a lot

    Normally problems regarding cannot resolve symbol I've found are because the file you're working on uses another class file in the code, and the compiler from the prompt doesn't know where it's looking for the dependant classes. When compiling try using "javac -classpath "c:\whereyourclassesare" "c:\whereyourjavafileis.java""
    That should work, hopefully :)

  • Exception occure when running bookstore2 JSP example from Java WSDP 1.1

    I am new to Java WSDP, and just downloaded 1.1 version and tried it with the tutorial.
    1. In section for populating pointbase database, tutorial says just "Enter ant. ... default Ant task create-book-db" will populate database. However, I couldn't get this working until I explicitly excute "ant create-book-db". Is there anything wrong here? Does it affect the rest of the tutorial?
    2. I managed to use '...\bookstore2\ant build' to compile the JSP version of the Bookstore, but I need help for installing it.
    Steps I took:
    start pointbase
    ...\web\ant create-books-db --- seems to be successful
    ...\web\bookstore2\ant build --- successful
    start Tomcat
    go to admin page and configured the dataSource
    ...\web\bookstore2\ant install ---- HELP! exceptions:
    install:
    [install] FAIL - Encountered exception java.io.IOException: java.lang.reflect.
    InvocationTargetException
    BUILD FAILED
    file:C:/Java/jwsdp-1.1/docs/tutorial/examples/web/bookstore2/build.xml:93: FAIL
    - Encountered exception java.io.IOException:
    java.lang.reflect.InvocationTargetException
    Really hope anyone can offer me some help, many many thanks.

    i have the same problem.................. boy.
    and now i have the answer for this problem. wait please.

  • Java concurrency benchmarks - need ideas

    Hi,
    I'm doing a little research about concurrency in Java for my University and have to make series of benchmarks.
    What is has to be done is a conclusions such like "yeah, ReentrantLock is good for more scalable locking, but if you need simple lock a non-nested block of code, it's better to use synchronized because of less overhead in today versions of JDK 5 and 6".
    In my benchmarks I'm trying to follow mostly JCIP book, doing for example performance measurements of concurrent collection classes by implementing for example producer-consumer pattern with various consumer load of work degree, various consumer threads number, etc. I've also measured overhead of locking (my previous post). I will also measure mean Thread creation and start() time taken.
    But I don't have idea for simple use-cases of concurrency, that will lead me to make conclusions like above. Have you got any ideas what should be measured?

    Find the "Java Concurrency in Practice" -book is has some of the performance discussion that you talk about. Might be some code samples on the books website http://jcip.net/

  • Using ExecutorService class from java.util.concurrent package

    Dear java programmers,
    I have a question regarding the ExecutorService class from java.util.concurrent package.
    I want to parse hundreds of files and for this purpose I'm implementing a thread pool. The way I use the ExecutorService class is summarized below:
    ExecutorService executor = Executors.newFixedThreadPool(10);
            for (int i = 0; i < 1000; i++){
                System.out.println("Parsing file No "+i);
                executor.submit(new Dock(i));
            executor.shutdown();
            try {
                executor.awaitTermination(30, TimeUnit.SECONDS);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            executor.shutdownNow();However, the code snippet above creates all the 1000 threads (Dock objects) at once and loads them to the executor, and thus I'm worrying about memory leak. I haven't tested it on 1000 files yet but just on 50 small ones, and even if the program prints out "Parsing file No "+i 50 times at once, it executes normally the threads in the background.
    I guess the write way would be to keep the number of active/idle threads in the executor constant (lets say 20 if the thread pool's size is 10) and submit a new one whenever a thread has been finished or terminated. But for this to happen the program should be notified someway whenever a thread is done. Can anybody help me do that?
    thanks in advance,
    Tom

    Ok I found a feasible solution myself although I'm not sure if this is the optimum.
    Here's what I did:
            ExecutorService executor = Executors.newFixedThreadPool(10);
            Future<String> future0, future1, future2, future3, future4, future5, future6, future7, future8, future9;
            Future[] futureArray = {future0 = null, future1 = null, future2 = null, future3 = null, future4 = null, future5 = null,
            future6 = null, future7 = null, future8 = null, future9 = null};
            for (int i = 0; i < 10; i++){
                futureArray[i] = executor.submit(new Dock(i));
            }I created the ExecutorService object which encapsulates the thread pool and then created 10 Future objects (java.util.concurrent.Future) and added them into an Array.
    For java.util.concurrent.Future and Callable Interface usage refer to:
    [http://www.swingwiki.org/best:use_worker_thread_for_long_operations]
    [http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part1/Java/Chapter10/concurrencyTools.html]
    I used a Future[] Array to make the code neater. So after that I submitted -and in this way filled up- the first 10 threads to the thread pool.
            int i = 9;
            while (i < 1000){
                for (int j = 0; j < 10; j++){
                    if (futureArray[j].isDone() && i < 999){
                        try{
                            i++;
                            futureArray[j] = executor.submit(new Dock(i));
                        } catch (ExecutionException ex) {
                            ex.printStackTrace();
                        } catch (InterruptedException ex) {
                            ex.printStackTrace();
                try {
                    Thread.sleep(100); // wait a while
                } catch(InterruptedException iex) { /* ignore */ }
            executor.shutdown();
            try {
                executor.awaitTermination(60, TimeUnit.SECONDS);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            executor.shutdownNow();
        }Each of the future[0-9] objects represents a thread in the thread pool. So essentially I'm check which of these 10 threads has been finished (using the java.util.concurrent.Future.isDone() method) and if yes I replenish that empty future[0-9] object with a new one.

  • How to call a BPEL process from Oracle Apps Java Concurrent program

    Hello,
    I need to trigger a BPEL process from Oracle Apps. Can anybody tell me how to do that? I have two triggering option--
    1. On button click from a Form 6i screen
    2. Using Java Concurrent program.
    Thanks in advance.
    Debkanta

    I am not sure how concurrent program works, but may be one of the way might work out, let me know if Java Concurrent Program works a bit different way
    - [if async] Through concurrent program, you can insert message token to db or aq, and BPEL can be instantiated from there
    or
    - If it supports pure java call, then you can look at multiple documents (e.g. http://www.oracle.com/technology/products/ias/bpel/pdf/orabpel-Tutorial7-InvokingBPELProcesses.pdf) to invoke your process
    - You can also use oracle db utility to invoke soap operation and get the result back
    HTH,
    Chintan

  • Question related to Java Concurrent Program

    Hi Friends,
    I have a basic question related to Java Concurrent Program in the Oracle application. I would like to know the how Java concurrent program is executed in Oracle applications.Also, want to know where can I find the document for the AOL packages for Java concurrent program. Document for packages like oracle.apps.fnd.cp.request.* , oracle.apps.fnd.util.*.
    Please let me know.
    -Thanks,
    Satya

    You may also check:
    Note: 250964.1 - How to Register Sample Java Concurrent Program
    https://metalink.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_id=NOT&p_id=250964.1
    Note: 186301.1 - How to register and execute Java Concurrent Program ?in Oracle Applications R11i?
    https://metalink.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_id=NOT&p_id=186301.1

Maybe you are looking for

  • Grayscale scanning comes into Acrobat as black and white

    I am trying to scan photos and other documents that have grays in them, using Acrobat Pro 9. They are coming in as if I had specified black and white. What am I missing? Thanks in advance. PS Sorry about the wierd screen name. I had tried a number of

  • I cant install netflix app to i pad

    i cant install netflix app to i pad

  • Emac Crashes With Any Application.  Please Help?

    Can anyone please help? I have had an Emac computer for years now.  I hardly ever use it, but it has a lot of my old video files and documents on it.  I mainly work with my macbook pro.  Until recently, my Emac has been working fine, but I tried to u

  • Problem connecting to critical device

    I've been getting this message whenever I start up my Think Pad Z61m. The problem seemed to begin soon after upgrading my AVG security software from 8.5 to 9. This message comes from the Client Security Solution: "There was a problem connecting to a

  • Glitch photo app (iphone 4)

    When in the opening screen of the photo app, it glitches back to the home screen as soon as I attempt to get into an album. I can't access it through the camera, and it does the same from the facebook app. Restarting my phone did not solve it. Does a