Locking up from multiple threads reading

I have a Berkeley DB with approximately 90 million records in it. I have 16 files with about 6 million records per file. I need to join the records in the files with the records in Berkeley DB by primary key and store them in a Lucene index. I have a program that spawns a new thread for each file, for a total of 16 threads that are reading records from one database. The database is set to not allow duplicates and is read only. It seems to run fine but when each thread has read about 200,000 to 300,000 records, it locks up.
Some of the settings used:
duplicates allowed - false
transactional - false
create if not found - false
read only - true
log file size - 100000000
% of memory used - 60% (the default I believe)
I have tried several different settings, number of threads etc but the same thing happens each time any suggestions?
Thanks

Hello,
If by "locks up" you mean an exception is thrown, please post the exception and stack trace. If you mean that the Java threads are deadlocked internally and no exception is thrown, please take a Java thread dump and post the output.
Thanks,
--mark                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

Similar Messages

  • Synchronize work from multiple threads using wait() and notifyAll() help

    Hello folks,
    (Sorry for my bad english)
    My current project handles multiple access requests to a shared collection from multiple threads originating from different classess and methods. Therefor I need to keep track of the order in which the Threads access that collection. I wrote a sort of Buffer class that has a static instance entry which initiate a new Instance of my Buffer class, attributes the instance a cue number and return the instance to the caller Thread.(Just like when you go to a supermarket and draw a number to wait to get served at the cheese counter).The callerThread then uses this instance to execute a method within the buffer class. Inside the buffer class method, I want to set a while loop on wait() just like this:
    while(currentCue != myCueState)
    wait();
    when all other prior method calls within my Buffer class are done, the loop should wake up using a notifyAll() call and check the condition "currentCue != myCueState" agen to see if its turn has come.
    I am new to the wait() and notifyAll() stuff and are therefor not sure what I am dooing wrong here: The only way this buffer class finishes all it's cues is when the caller Threads are beeing executed in the same order than they have checked in to the Buffer class. Otherwise I get some sort of dead-lock in the middle. Here is my code for the Buffer class:
    public class Buffer{
        private static int currentCue = 0;
        private static int lastCued = 0;
        private int myCueState;
        private Buffer myInstance = null;
        synchronized void doTaskOne(){      
            try{
                while(currentCue != myCueState)
                    wait();           
                //Do your task now
                System.out.println("doTaskOne got Executed: "+currentCue);
                currentCue++;
                notifyAll();
            catch(Exception a){}
        synchronized void doTaskTwo(){
             try{
                while(currentCue != myCueState)
                    wait();
                //Do your task now
                System.out.println("doTaskTwo got Executed: "+currentCue);
                currentCue++;
                notifyAll();
            catch(Exception a){}
        synchronized void doTaskThree(){
            try{
                while(currentCue != myCueState)
                    wait();          
                //Do your task now
                System.out.println("doTaskThree got Executed: "+currentCue);
                currentCue++; 
                notifyAll();
            catch(Exception a){}
        synchronized Object getSomething(){
            try{                   
                while(currentCue != myCueState)
                    wait();           
                //Do your task now
                System.out.println("getSomething got Executed");
                currentCue++;
                notifyAll();
            catch(Exception a){}
            return "something";
        //Access the buffer class through a single static synchronized instance and draw a turn number
        public synchronized Buffer instance(){
            myInstance = new Buffer();
            myInstance.setMyCueState();
            return myInstance;
        private void setMyCueState(){
             myCueState = lastCued;
             lastCued++;
    }and here for the Test class I have coded to test this:
    public class TestBuffer{
         private Buffer accessOne;
         private Buffer accessTwo;
         private Buffer accessThree;
         private Buffer accessFour;
         public TestBuffer(){
                    //Instantiate different instances from Bufferclass and draw a number
              accessThree = new Buffer().instance();
              accessOne = new Buffer().instance();
              accessTwo = new Buffer().instance();          
              accessFour = new Buffer().instance();
              Thread one = new Thread(){
                   public void run(){
                        accessOne.doTaskOne();
              Thread two = new Thread(){
                   public void run(){
                        accessTwo.doTaskTwo();
              Thread three = new Thread(){
                   public void run(){
                        accessThree.doTaskThree();
              Thread four = new Thread(){
                   public void run(){
                        accessFour.getSomething();
              try{               
                   one.start();                    
                   two.start();
                   three.start();     
                   four.start();                         
              catch(Exception f){}
         public static void main(String args[]){
              TestBuffer myTest = new TestBuffer();
    }What am I doing wrong here??
    Maby this is not how I should use the notifyAll() method, but how then?
    Please give me a solution!
    Thanks

    Ok, so if I get you guys right, the following should do it:
    public class Buffer{
        private static Object sharedLock = new Object();
        public void doTaskOne(){      
              synchronized(sharedLock)  {
                System.out.println("doTaskOne got Executed: ");
        public void doTaskTwo(){
             synchronized(sharedLock)  {
                System.out.println("doTaskTwo got Executed: ");
        public void doTaskThree(){
             synchronized(sharedLock)  {
                  System.out.println("doTaskThree got Executed: ");
        public Object getSomething(){
            synchronized(sharedLock)  {
                System.out.println("getSomething got Executed");
                return "something";
    }Lets say that each method accesses the same ressources (in this case a table model) to retreave values, delete rows and set some existing values vith new values and all this 20-30 times a minute, all processing will stay synchronised and collision is not possible?
    And lets say I would update the Table model directly from the buffer Class using MyTableModel.instance().setValueAt() or watever methods I implemented on my Table model, could I safely do that using "SwingUtilities.invokeLater();" from my BufferClass just like this:
    public void doTaskThree(){
            synchronized(sharedLock)  {
                   Runnable runme = new Runnable(){
                         public void run(){
                                MyTableModel.instance().setValueAt("abc", 5,5);  
                   SwingUtilities.invokeLater(runme);
    }Thanks in advance for your help guys!

  • Calling System.exit() from multiple threads

    Hi,
    Why would calling System.exit() from multiple threads cause all the threads to block?
    Laith

    Thanks for your replies.
    I made further tests and the problem is actually not as I described it first.
    I'm using a shutdown hook that would stop all running threads if the program is stopped externally (using ctl-c for example) (I'm not using Thread.stop(), but setting a boolean value to false that would make the thread exit a while() loop in run()) .
    One of the running threads would call System.exit(-1) just before it would exit run().
    This thread is getting blocked if it is stopped by the shutdown hook.
    I know that this is a bad coding practice, bout would still appreciate an explanation to the reason why the thread is actually blocked by System.exit().
    Laith

  • How to read from and write into the same file from multiple threads?

    I need to read from and write into a same file multiple threads.
    How can we do that without any data contamination.
    Can u please provide coding for this type of task.
    Thanks in advance.

    Assuming you are using RandomAccessFile, you can use the locking functionality in the Java NIO library to lock sections of a file that you are reading/writing from each thread (or process).
    If you can't use NIO, and all your threads are in the same application, you can create your own in-process locking mechanism that each thread uses prior to accessing the file. That would take some development, and the OS already has the capability, so using NIO is the best way to go if you can use JDK 1.4 or higher.
    - K
    I need to read from and write into a same file
    multiple threads.
    How can we do that without any data contamination.
    Can u please provide coding for this type of task.
    Thanks in advance.

  • DBXML 2.4.16:  Accessing containers from multiple threads and deadlock

    Hi,
    I am evaluating dbxml for my upcoming project (http://xcapserver.sourceforge.net) where I am sending following four requests through multiples threads which gets into deadlock situation after running certain iterations. Can you please help me what am I doing wrong?
    1. Put Document
    2. Get Document
    3. Get Document Node (XPATH Query)
    4. Delete Document
    I am using following environment variables.
    u_int32_t env_flags = DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL |DB_INIT_TXN | DB_THREAD|DB_RECOVER| DB_AUTO_COMMIT; (I tried removing DB_AUTO_COMMIT)
    dbEnv_.open(dbxml_env.c_str(), env_flags, 0);
    XmlManager instance is initialized as :pxmlmgr_= new XmlManager(&dbEnv_) ;
    pxmlmgr_->setDefaultContainerType(DbXml::XmlContainer::WholedocContainer);
    NOTE: pxmlmgr_ instance is member variable of singleton class assuming XmlManager is thread safe and can be reused for all threads.
    Below is the psudo code. It is written in C++. I have removed exception handling and other code for clarity.
    getDocument (...){
    XmlTransaction containerTxn =pxmlmgr_->createTransaction();
              XmlContainer cont = pxmlmgr_->openContainer(container, DB_RDONLY|DB_THREAD);
              XmlDocument doc = cont.getDocument(document);
              containerTxn.commit();
              data = doc.getContent(data
    NOTE: To use doc(...) function, I have to create an alias than only I can use container name e.g /dbxml/resource-lists/users/rjoshi where /dbxml is env_home.
    container name: /dbxml/resource-lists/users/rjoshi (here rjoshi is container name)
    document name: presence
    getDocumentNode(...) {
    size_t npos = container.find_last_of("/", container.length());
              std::string alias = container.substr(npos+1, container.length()-npos) + "_" + document;
                   XCAP_DEBUG("Alias:" + alias);
                   std::string fullQuery = "doc('dbxml:" + alias + '/' + document + "')" + node;
                   XCAP_DEBUG("XPath Full Query:" + fullQuery);
                   XmlTransaction txn = pxmlmgr_->createTransaction();
                   XmlContainer cont = pxmlmgr_->openContainer(container, DB_RDONLY|DB_THREAD);
                   cont.addAlias(alias);
                   //query context
                   XmlQueryContext context = pxmlmgr_->createQueryContext();
              XmlResults results(pxmlmgr_->query(fullQuery, context ) );
                   cont.removeAlias(alias);
                   txn.commit();
    putDocument(....){
    size_t npos = container.find_last_of("/", container.length());
              std::string dir = container.substr(0, npos);
                   boost::filesystem::path p(dir);
                   if(!boost::filesystem::exists(p)) {
                        boost::filesystem::create_directories(p);
                   XmlTransaction txn = pxmlmgr_->createTransaction();
                   XmlContainer cont = pxmlmgr_->openContainer(container, DBXML_TRANSACTIONAL|DB_THREAD|DB_CREATE);
              XmlUpdateContext updateContext = pxmlmgr_->createUpdateContext();
                   cont.putDocument(document, data, updateContext, 0);
                   txn.commit();
    deleteDocument() {
    XmlTransaction txn = pxmlmgr_->createTransaction();
              XmlContainer cont = pxmlmgr_->openContainer(container, DB_THREAD);
              XmlUpdateContext updateContext = pxmlmgr_->createUpdateContext();
              cont.deleteDocument(document, updateContext);          
              txn.commit();
    }

    1. What platform are you on?
    rjoshi>>I am running on mac OSX 10.5.8
    2. There are still some potential coding issues here:
    2a. In DbXmlDb.hpp there is a DbEnv instance which is
    a member of your class. If using DbEnv as a data member
    it is usually best to use new/delete vs making it a member.
    rjoshi>>I have modified code to use new/delete
    2b. In DbXmlDB.cpp DBXML_ADOPT_DBENV is being used.
    DBXML_ADOPT_DBENV requires that DbEnv be created via
    new() as it calls delete() on it.
    rjoshi>> modified code to use new/delete
    2c. In general is it best not to open containers upon
    each use. Containers should be opened and shared among
    threads.
    rjoshi>> In real application, multiple devices (e.g IM, Phone) can read/write same document but it's not always the case so I don't want to open the container and keep in the memory. There is no way for me to know when to close the container. Is there any way to set flag where container can be open for certain duration and if not used, it will get closed and removed from memory?
    2d. Instead of using a transaction for opening containers
    use DBXML_TRANSACTIONAL|DB_THREAD. Also the use of
    DB_RDONLY in the read cases will not change anything significant
    as open instances are shared and the state of the first
    one is the only one that counts.
    rjoshi>> In init() function, I am setting default container flags as
    pxmlmgr_->setDefaultContainerFlags(DB_CREATE | DB_THREAD
                   | DBXML_TRANSACTIONAL);
    Do I still need to set these flags while opening the container?
    2e. The setting of DB_THREAD looks to be used inconsistently.
    It should be used all the time if the application is
    making use of threading.
    rjoshi>> Again I was setting default flag for container as below in the init() function so was not using it. I have corrected the inconsistency.
    pxmlmgr_->setDefaultContainerFlags(DB_CREATE | DB_THREAD
                   | DBXML_TRANSACTIONAL);
    2f. I can not tell for sure from looking at the cpp file,but
    just make sure that operation-based transactions are consistently
    passed in the application.
    rjoshi>> I have removed transactions while opening the container and using all other places.
    Still I am able to reproduce the deadlock. Please see the below output of db_state -CA.
    bash-3.2$ ./db_stat -h /dbxml/ENV -CA
    Default locking region information:
    3327     Last allocated locker ID
    0x7fffffff     Current maximum unused locker ID
    9     Number of lock modes
    1000     Maximum number of locks possible
    1000     Maximum number of lockers possible
    1000     Maximum number of lock objects possible
    39     Number of current locks
    143     Maximum number of locks at any one time
    75     Number of current lockers
    313     Maximum number of lockers at any one time
    12     Number of current lock objects
    26     Maximum number of lock objects at any one time
    6643     Total number of locks requested
    6560     Total number of locks released
    0     Total number of locks upgraded
    2166     Total number of locks downgraded
    531     Lock requests not available due to conflicts, for which we waited
    9     Lock requests not available due to conflicts, for which we did not wait
    0     Number of deadlocks
    0     Lock timeout value
    0     Number of locks that have timed out
    0     Transaction timeout value
    0     Number of transactions that have timed out
    464KB     The size of the lock region
    60     The number of region locks that required waiting (0%)
    =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    Lock REGINFO information:
    Lock     Region type
    7     Region ID
    /dbxml/ENV/__db.007     Region name
    0xf000     Original region address
    0xf000     Region address
    0xf044     Region primary address
    0     Region maximum allocation
    0     Region allocated
    Region allocations: 3005 allocations, 0 failures, 0 frees, 1 longest
    REGION_JOIN_OK     Region flags
    =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    Lock region parameters:
    786457     Lock region region mutex [60/23741 0% 12394/0]
    1031     locker table size
    1031     object table size
    436     obj_off
    45860     locker_off
    1     need_dd
    =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    Lock conflict matrix:
    0     0     0     0     0     0     0     0     0     
    0     0     1     0     1     0     1     0     1     
    0     1     1     1     1     1     1     1     1     
    0     0     0     0     0     0     0     0     0     
    0     1     1     0     0     0     0     1     1     
    0     0     1     0     0     0     0     0     1     
    0     1     1     0     0     0     0     1     1     
    0     0     1     0     1     0     1     0     0     
    0     1     1     0     1     1     1     0     1     
    =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    Locks grouped by lockers:
    Locker Mode Count Status ----------------- Object ---------------
    c3e dd= 0 locks held 1 write locks 0 pid/thread 12389/0
    c3e READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 2
    c41 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    c42 dd= 0 locks held 1 write locks 0 pid/thread 12389/0
    c42 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 4
    c45 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    c46 dd= 0 locks held 1 write locks 0 pid/thread 12389/0
    c46 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 6
    c49 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    c4a dd= 0 locks held 1 write locks 0 pid/thread 12389/0
    c4a READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 8
    c4d dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    c4e dd= 0 locks held 1 write locks 0 pid/thread 12389/0
    c4e READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 10
    c51 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    c52 dd= 0 locks held 2 write locks 0 pid/thread 12389/0
    c52 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 12
    c52 READ 6 HELD /dbxml/resource-lists/users/rjoshi handle 0
    c55 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    c59 dd= 0 locks held 1 write locks 0 pid/thread 12389/0
    c59 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 14
    c5c dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    c5d dd= 0 locks held 2 write locks 0 pid/thread 12389/0
    c5d READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 16
    c5d READ 2 HELD /dbxml/resource-lists/users/rjoshi handle 0
    c60 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    80000325 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    80000326 dd= 0 locks held 1 write locks 0 pid/thread 12389/0
    80000326 WRITE 1 WAIT /dbxml/resource-lists/users/rjoshi page 13
    80000326 READ 2 HELD /dbxml/resource-lists/users/rjoshi page 11
    80000327 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    c8e dd= 0 locks held 2 write locks 0 pid/thread 12389/0
    c8e READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 18
    c8e READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 0
    80000328 dd= 0 locks held 1 write locks 0 pid/thread 12389/0
    80000328 WRITE 1 WAIT /dbxml/resource-lists/users/rjoshi page 13
    80000328 READ 2 HELD /dbxml/resource-lists/users/rjoshi page 11
    8000032a dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    c91 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    8000032b dd= 0 locks held 3 write locks 1 pid/thread 12389/0
    8000032b WRITE 1 WAIT /dbxml/resource-lists/users/rjoshi page 11
    8000032b READ 7 HELD /dbxml/resource-lists/users/rjoshi page 13
    8000032b WRITE 14 HELD /dbxml/resource-lists/users/rjoshi page 13
    8000032b READ 3 HELD /dbxml/resource-lists/users/rjoshi page 11
    8000032c dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    8000032c READ 1 WAIT /dbxml/resource-lists/users/rjoshi page 11
    c93 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    8000032d dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    c94 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    8000032e dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    8000032e READ 1 WAIT /dbxml/resource-lists/users/rjoshi page 11
    c95 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    8000032f dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    80000330 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    80000330 READ 1 WAIT /dbxml/resource-lists/users/rjoshi page 11
    80000331 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    80000332 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    80000332 READ 1 WAIT /dbxml/resource-lists/users/rjoshi page 11
    c99 dd= 0 locks held 1 write locks 0 pid/thread 12389/0
    c99 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 2
    80000333 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    80000333 READ 1 WAIT /dbxml/resource-lists/users/rjoshi page 11
    80000334 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    80000334 READ 1 WAIT /dbxml/resource-lists/users/rjoshi page 11
    80000335 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    c9c dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    80000336 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    80000336 READ 1 WAIT /dbxml/resource-lists/users/rjoshi page 11
    c9d dd= 0 locks held 1 write locks 0 pid/thread 12389/0
    c9d READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 4
    ca0 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    ca1 dd= 0 locks held 1 write locks 0 pid/thread 12389/0
    ca1 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 6
    ca4 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    ca5 dd= 0 locks held 1 write locks 0 pid/thread 12389/0
    ca5 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 8
    ca8 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    ca9 dd= 0 locks held 1 write locks 0 pid/thread 12389/0
    ca9 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 10
    cac dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    cad dd= 0 locks held 2 write locks 0 pid/thread 12389/0
    cad READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 12
    cad READ 6 HELD /dbxml/resource-lists/users/rjoshi handle 0
    cb0 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    cb4 dd= 0 locks held 1 write locks 0 pid/thread 12389/0
    cb4 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 14
    cb7 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    cb8 dd= 0 locks held 2 write locks 0 pid/thread 12389/0
    cb8 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 16
    cb8 READ 2 HELD /dbxml/resource-lists/users/rjoshi handle 0
    cbb dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    ce9 dd= 0 locks held 2 write locks 0 pid/thread 12389/0
    ce9 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 18
    ce9 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 0
    cec dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    ced dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    cee dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    cef dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    cf0 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    cf1 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    cf2 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    cf3 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    cf4 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    cf5 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    cf6 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    cf7 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    cf8 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    cf9 dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    cfa dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    cfb dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    cfc dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    cfd dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    cfe dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    cff dd= 0 locks held 0 write locks 0 pid/thread 12389/0
    =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    Locks grouped by object:
    Locker Mode Count Status ----------------- Object ---------------
    80000326 READ 2 HELD /dbxml/resource-lists/users/rjoshi page 11
    80000328 READ 2 HELD /dbxml/resource-lists/users/rjoshi page 11
    8000032b READ 3 HELD /dbxml/resource-lists/users/rjoshi page 11
    8000032b WRITE 1 WAIT /dbxml/resource-lists/users/rjoshi page 11
    8000032c READ 1 WAIT /dbxml/resource-lists/users/rjoshi page 11
    8000032e READ 1 WAIT /dbxml/resource-lists/users/rjoshi page 11
    80000330 READ 1 WAIT /dbxml/resource-lists/users/rjoshi page 11
    80000332 READ 1 WAIT /dbxml/resource-lists/users/rjoshi page 11
    80000333 READ 1 WAIT /dbxml/resource-lists/users/rjoshi page 11
    80000334 READ 1 WAIT /dbxml/resource-lists/users/rjoshi page 11
    80000336 READ 1 WAIT /dbxml/resource-lists/users/rjoshi page 11
    c4e READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 10
    ca9 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 10
    c4a READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 8
    ca5 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 8
    c59 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 14
    cb4 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 14
    8000032b WRITE 14 HELD /dbxml/resource-lists/users/rjoshi page 13
    8000032b READ 7 HELD /dbxml/resource-lists/users/rjoshi page 13
    80000328 WRITE 1 WAIT /dbxml/resource-lists/users/rjoshi page 13
    80000326 WRITE 1 WAIT /dbxml/resource-lists/users/rjoshi page 13
    c52 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 12
    cad READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 12
    c3e READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 2
    c99 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 2
    c52 READ 6 HELD /dbxml/resource-lists/users/rjoshi handle 0
    c5d READ 2 HELD /dbxml/resource-lists/users/rjoshi handle 0
    c8e READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 0
    cad READ 6 HELD /dbxml/resource-lists/users/rjoshi handle 0
    cb8 READ 2 HELD /dbxml/resource-lists/users/rjoshi handle 0
    ce9 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 0
    c46 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 6
    ca1 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 6
    c42 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 4
    c9d READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 4
    c8e READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 18
    ce9 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 18
    c5d READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 16
    cb8 READ 1 HELD /dbxml/resource-lists/users/rjoshi handle 16

  • Accessing the same data from multiple threads

    Hi
    In the following program the task5 routine takes ~3s to complete, when I uncomment the t2 lines it takes 11s (this is on a quad-core x86/64 machine). Since there is no explicit synchronization I was expecting 3s in both cases.
    public static int sdata;
    public static void Task5()
    int acc = 0;
    for (int i = 0; i < 1000000000; ++i)
    sdata = i;
    acc += sdata;
    [STAThread]
    static void Main()
    Stopwatch sw = new Stopwatch();
    sw.Start();
    Thread t1 = new Thread(new ThreadStart(Task5));
    // Thread t2 = new Thread(new ThreadStart(Task5));
    t1.Start();
    // t2.Start();
    t1.Join();
    // t2.Join();
    sw.Stop();
    System.Diagnostics.Debug.WriteLine(sw.ElapsedMilliseconds.ToString());
    Why are these threads blocking each other?

    This is loosely a duplicate of https://social.msdn.microsoft.com/Forums/en-US/cd00284d-3da3-457e-8926-c490e7ca6d92/atomic-loadstore?forum=vclanguage
    I answered you in detail over at the other thread.
    But the short version is that the threads are competing for access to system memory, specifically at the memory location of sdata.  This demonstrates how to spoil the benefits of not having to write-through from your CPU cache to system memory.  CPU
    Caches are wonderful things.  CPU cache memory is WAY faster than system memory.

  • Accessing a Database from multiple threads

    I would like to create a database application where more then one thread can access this database at once. What is the best way to synchronize access to it so as to prevent errors?

    Actually, I wasn't thinking of using an SQL database since I haven't studied it. But, would it be a good idea to have one object of type "Database", and use 'synchronize' to control thread access?
    Also, the database access needs to be restricted based on different users, so I am using a SecurityManager. I was thinking the structure would look something like this:
    security manager
    database manager
    database
    in this way, a request to retrieve data from the database would need to be requested from my security manager. If the request is allowed, it would be filtered down to the database manager. Is this the best way to do this?
    And finally, someone told me that using something like an "event queue" to access data would work but I've never tried this. My database manager thread would process the requests one at a time. would this work well?

  • Jprogress bar from multiple threads?

    Hello,
    I have three background tasks running in separate threads. In those tasks, I've written methods for setting the progress. I haven't worked with progress bars very much but I know how to get one to display and update for one task. My question is, how do I create one progress bar, that would update with the total progress of the three combined tasks?
    Edited by: Sch104 on Jun 16, 2008 1:59 PM

    Hmm ok well so far, here is what happens,
    I click Run(a menu option)
    the progress bar pops up in its own window as intended.
    progress bar doesn't display anything but calculations are still running in the background on the three worker threads.
    My class WorkerThread extends Thread. Inside run() it calls the method to calculate the data. In the calculate() method, I use SwingUtilities.invokeLater() to calcProgress() and then set my progress bar's value to that new value.
    Here is the relevant code:
    InvokeLater() inside of calcSoilMoistureTemp():
    SwingUtilities.invokeLater(new Runnable()
                             public void run()
                                  if (soilModel.fluxGraph){
                                       soilModel._livePanel.addPoints(soilModel.time,
                                                 soilModel._weather.surfacetemp[soilModel.day][soilModel.minutes],
                                                 soilModel.soilNodes.get(soilModel.m).getOldWaterContent(),
                                                 soilModel.soilNodes.get(soilModel.m/2).getOldWaterContent(),
                                                 soilModel.soilNodes.get(soilModel.m-2).getOldWaterContent(),
                                                 soilModel.soilNodes.get(soilModel.m).getNewTemperature(),
                                                 soilModel.soilNodes.get(soilModel.m/2).getNewTemperature(),
                                                 soilModel.soilNodes.get(soilModel.m-2).getNewTemperature(),
                                                 soilModel.soilNodes.get(1).getFlux());
                                  else{
                                       soilModel._livePanel.addPoints(soilModel.time,
                                                 soilModel._weather.surfacetemp[soilModel.day][soilModel.minutes],
                                                 soilModel.soilNodes.get(soilModel.m).getOldWaterContent(),
                                                 soilModel.soilNodes.get(soilModel.m/2).getOldWaterContent(),
                                                 soilModel.soilNodes.get(soilModel.m-2).getOldWaterContent(),
                                                 soilModel.soilNodes.get(soilModel.m).getNewTemperature(),
                                                 soilModel.soilNodes.get(soilModel.m/2).getNewTemperature(),
                                                 soilModel.soilNodes.get(soilModel.m-2).getNewTemperature(),
                                                 soilModel.hf);
                                  calcProgress();
                                  _parent.modelProgress.setValue(_parent.modelProgress.getValue()+ (percentcomplete/_parent.getModelRuns()));
                        });Here is my WorkerThread:
    import java.io.IOException;
    import backend.SoilCalc;
    import backend.SoilModel;
    public class WorkerThread extends Thread{
         SoilModel model;
         public WorkerThread(SoilModel model) {
              this.model = model;
         @Override
         public void run() {
              try {
                   SoilCalc calc = new SoilCalc(model);
                   calc.calcSoilMoistureTemp();
              } catch (NumberFormatException e) {
                   // TODO Auto-generated catch block
                   e.printStackTrace();
              } catch (IOException e) {
                   // TODO Auto-generated catch block
                   e.printStackTrace();
    }and Where I call my threads:
                             // Set the number of threads to be created
                             int numThread = 0;
                             numThread = soilQueue.length;
                             // Create the threads and make each one start.
                             Thread[] threads = new Thread[numThread];
                             for (int i=0; i < numThread; i++) {
                                  if (soilQueue[i] != null){
                                       threads[i] = new WorkerThread(soilQueue);
                                       threads[i].start();
                             //Wait for each thread to finish
                             try {
                                  for (int i=0; i < numThread; i++) {
                                       if (threads[i] != null){
                                            threads[i].join();
                             catch (InterruptedException e1) {
                                  // TODO Auto-generated catch block
                                  e1.printStackTrace();
                             }Why won't it update the progress bar? I'm doing the calculations in workerthreads so that should leave the EDT open to accept the progress bar update correct?
    Edited by: Sch104 on Jun 16, 2008 2:34 PM
    I tried creating the progress bar in a new thread as well. no luck. The window for it appears but the progress bar never updates. It shows whatever was in the window behind it.  Is the join() blocking?
    Edited by: Sch104 on Jun 16, 2008 3:44 PM                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

  • How to handle multiple threads to read one line from a file each time?

    Dear Sir or Madam,
    I'm new to multiple threads java programming. What I want to do is as following:
    1. I'm writing a program to read one line of text from a very large file, and then do some process on this one line of text, then read the next line of text from this file, then process on this line of text, ...... When reach the end of the file, close the file.
    This is a single thread scenario.
    2. To fullly untilized computer resource, I want to create multiple threads to process this large file.
    One thing is very important is that each line of text in the large file has to be read sequentially. This means that the first line of text in the large file is read first, then the second line, then the third line ......
    My question is that if I create multiple threads to process the same file, how can I make sure that different threads will read the line of text from the same file sequentially?
    I don't have enough experience on java multiple threads programming, so it will be very appreaciated if you can help me on this as soon as you are available.
    Thanks and regards,
    Steven Wu

    A better solutoin would be to have a single thread that reads each line an puts it into a queue, and then multiple threads reading from the queue to process these lines.
    This will only be effective if the amount of processing to be done on each line is very large compared to how long it takes to read the line, or if you have more than one CPU on your machine.

  • Problem with multiple threads accessing the same Image

    I'm trying to draw into one Image from multiple threads. It works fine for a while, but then suddenly, the image stops updating. Threads are still running but the image won't update. I'm using doublebuffering and threads are simply drawing counters into Image with different speed.
    It seems like the Image gets deadlocked or something. Anyone have any idea what's behind this behavior or perhaps better solution to do such thing.
    Any help will be appreciated.

    Sorry Kglad, I didn't mean to be rude. With "No coding
    errors" I meant the animation itself runs with no errors. I'm sure
    you could run the 20 instances with no freezing (that's why I put
    the post :) ) But I'm affraid it is an animation for a client, so I
    cannot distribute the code.
    Perhaps I didnt explain the situation clearly enough (in part
    because of my poor english...).-
    - By 20 instances I mean 20 separated embedded objects in the
    html
    - The animation is relatively simple. A turned on candle, in
    each cycle I calculate the next position of the flame (that
    oscilates from left to right). The flame is composed by 4
    concentric gradients. There is NO loops, only an 'onEnterFrame'
    function refreshing the flame each time.
    - It's true that I got plenty variables at the _root level.
    If that could be the problem, how can I workaround it?
    - It is my first time trying to embed so many objects at the
    same time too. No idea if the problem could be the way I embed the
    object from the html :(
    - The only thing I can guess is that when a cycle of one of
    the object is running, the other 19 objects must wait their turn.
    That would explain why the more instances I run, the worst results
    I get. In that case, I wonder if there's a way to run them in a
    kind of asynchronous mode, just guessing...
    Any other comment would be appreciated. Anyway, thanks a lot
    everybody for your colaboration.

  • Berkeley DB Java Edition - multiple threads accessing database

    Hi,
    I would like to access (read & write) a Berkeley DB from multiple threads (all same process/jvm).
    Should I use a single com.sleepycat.je.Database object for all threads, or should I create an instance for each?
    Or is there any other way of doing it?
    Thanks

    The Database object may be used by multiple threads, so you can use a single instance or multiple ones, as best suits you. From http://docs.oracle.com/cd/E17277_02/html/java/com/sleepycat/je/Database.html,
    Database handles are free-threaded and may be used concurrently by multiple threads. 'If you read through the javadoc, you'll find other notes on using classes from multiple threads.
    Regards,
    Linda

  • Multiple Threads Using System.out.println...

    i have a client server app and each client that connects to the server has its own thread.
    i am running the server on a pc using windows xp and to run it i just use a bat file which uses cmd.exe and my output using System.out.println prints out in the cmd.exe.
    each of my threads is using System.out.println to send debug info and outs quite often.
    after the screen fills a scroll bar appears at the right and you can scroll back to see past output.
    my app is all running ok but when i had a ton of output coming in all at once i tried to scroll back to see the older output and realized that if i click down on the scroll bar and fight the new input it freezes my server app. then when i release it it continues lol.
    it made me wonder if output from multiple threads when there are many all at once (say 20 or 30 threads all outputing at the exact same time) could cause a slow down or effect the performance of the server?
    i use a debug variable so i can just turn this output 100 % off except for critical errors so there would be no output but i am just curious as to whether or not it may be causing problems when its on.

    That's not a performance issue, I guess System.out.println() simply gets blocked by the console while you're scrolling and thus your app stalls, until you stop doing that.
    Maybe you should look into logging.

  • GUI locks up when trying to read output from server

    I have a client built in MVC fashion and have two GUI views. One view is for output from the server and input from the keyboard. The other view is for changing connection settings and starting the conection. The problem is when I make the call to connect from the connection GUI it is able to connect and set up the streams but both GUIs lock up once I start trying to output the text received from the server. The strange thing is that when I call these methods just from the Model and not via the GUI and its actionListener the whole thing works. I think it may have something to do with the loop locking up the GUI but don't how to resolve this.
    public void monitorServer()
    try
    char inputChar = (char)fromServer.read();
    while (socket.isConnected()==true && inputChar >-1 )
    inputChar = (char)fromServer.read();
    if ( ( (inputChar >= '0') && (inputChar <= 'z') )
    ||(inputChar == '\n')||(inputChar == '\r')
    ||(inputChar == ' ') )
    String tempString = (""+inputChar);
    mv.addText(tempString);
    catch(IOException ioException)
    JOptionPane.showMessageDialog(null,
    "Error: Failed to read message. Corrupt data sent by server",
    "Connection Error", JOptionPane.ERROR_MESSAGE);
    mv.addText("\nMessage not read.\n");
    The code above is the bot that screws it all up. mv is the other view that it is outputting the text to.
    Please help! I'm gonna fail my degree. :)

    you need to run your server connection part in another thread.

  • Best way to pass data back and forth from multiple NativeProcess threads

    Hi all,
    We have an application that requires multiple concurrent accesses to mulitple instances of a java NativeProcess. The input and output is XML data. I can see how to shunt this back and forth with only a single listening thread on stdout, but with multiple threads the whole thing is going to get rather jumbled. At the moment we are looking at using temporary files to read and write data from each instance, but I wonder if there might be a better way ... any suggestions?
    Thanks.

    I may not be completely understanding your issue...however you should be able to check which NativeProcess instance is giving you stdin/stdout/stderror data by checking the target member of the ProgressEvent. If that is not helpful, could you please provide some additional information about what you are trying to do, and what trouble you are running in to?
    Thanks,
    Chris Thilgen
    AIR Engineering

  • Read ini file with multiple threads

    I have a state machine architecture, but I have multiple threads. For instance, one is dealing with listening for mulitple tcp connections and storing their refnums to an array in a functional global. Another thread is accessing these refnums and collecting data it's receiving from each tcp connection. This data is queued up and then dequeued in a third thread which does some modification and sends it out via serial. My question is, when you have a situation like this and have to read an ini file, where should you read it? It seems like the most logical place would be outside your loops so you can get all the tcp and serial info (port, baud rate, etc) then wire it it to your create listener or initialize serial connection despite them being in different threads. But then again, normal state machine architecture would want an "initialize" case. If you did this though which loop would you put the init case in? And you would then have to worry about synchronizing loops becuase you wouldn't want one to try and create a listener while another thread was still reading ini data which would include the port to listen on. Maybe I'm overthinking this haha. Suggestions? Edit: one more question. Does it seem overkill that I have a tcp loop listening for data and queuing it up and a separate loop sending out the processed data via serial? Or should I just have one state that gets tcp data stores it in a shift register, then another state that sends it out via serial, and returns the state machine to the tcp read state?
    Message Edited by for(imstuck) on 03-03-2010 01:13 PM
    Message Edited by for(imstuck) on 03-03-2010 01:17 PM
    CLA, LabVIEW Versions 2010-2013

    Most of the applications I work on at the moment are used for testing barcode and label printers. The test applications I design are focused on testing the printer's firmware, not the hardware. Within our applications we have three primary objects (Unfortunately they are not native LabVIEW objects yet. They were developed before native LVOOP.) The primary objects we use in our applications are a log object, a connection object (communication interface to the printer) and a printer object. In any single instance of a test we only have a single printer, a single connection to the printer and one or more discrete logs. Each instance of these objects represent a single, real physical entity. A singleton object is a virtual representation of the physical world. Let's take the log object since that is the most simple of the objects described above. Naturally for a given log file you have the log file name and path. We also provide other attributes such as the maximum size of a single file (we allow log files to span multiple files), whether it is a comma delimited file or if it contains raw data, if timestamps should be included with a log entry and so forth. Most of these attributes are static for a log file with the exception of the name and such things as whether the logging is actually enabled or disabled. If we split a wire and had multiple instances of the log file (the way native LVOOP actually works) the attribute for whether logging is currently enabled or disabled will only pertain to the specific instance, or specific wire for the that object. Since this truly represents a single item, one log file, we need that attribute to be shared for all references to the instance of the log object. Since we allow this we can set an attribute on the log object in any task and it will be reflected in any other task that is using it. Think of the way a action engine or functional global works. However, in this case we provide discrete methods for the various actions.
    I hope that made some sense. If not let me know since I just whipped up this response.
    Mark Yedinak
    "Does anyone know where the love of God goes when the waves turn the minutes to hours?"
    Wreck of the Edmund Fitzgerald - Gordon Lightfoot

Maybe you are looking for