Thread.MemoryBarrier() questions

Hi!
I'm trying to avoid my code being rearranged by the CLR using Thread.MemoryBarrier(), as such:
/// <summary>
/// Client created a character!
/// </summary>
public static void HandleCharacterCreate(NetworkClient Client, ProcessedPacket P)
Logger.LogInfo("Received CharacterCreate!");
string AccountName = SanitizeAccount(P.ReadPascalString());
//Need to be variable length, because the success packet contains a token.
PacketStream CCStatusPacket = new PacketStream((byte)PacketType.CHARACTER_CREATION_STATUS, 0);
using (var db = DataAccess.Get())
Account Acc = db.Accounts.GetByUsername(AccountName);
if (Acc.NumCharacters >= 3)
CCStatusPacket.WriteByte((int)LoginDataModel.Entities.CharacterCreationStatus.ExceededCharacterLimit);
Client.SendEncrypted(CCStatusPacket.PacketID, CCStatusPacket.ToArray());
return;
//TODO: Send GUID to client...
Sim Char = new Sim(Guid.NewGuid());
Char.Timestamp = P.ReadPascalString();
Char.Name = P.ReadPascalString();
Char.Sex = P.ReadPascalString();
Char.Description = P.ReadPascalString();
Char.HeadOutfitID = P.ReadUInt64();
Char.BodyOutfitID = P.ReadUInt64();
Char.Appearance = (AppearanceType)P.ReadByte();
Char.ResidingCity = new CityInfo(false);
Char.ResidingCity.Name = P.ReadPascalString();
Char.ResidingCity.Thumbnail = P.ReadUInt64();
Char.ResidingCity.UUID = P.ReadPascalString();
Char.ResidingCity.Map = P.ReadUInt64();
Char.ResidingCity.IP = P.ReadPascalString();
Char.ResidingCity.Port = P.ReadInt32();
Char.CreatedThisSession = true;
var characterModel = new Character();
characterModel.Name = Char.Name;
characterModel.Sex = Char.Sex;
characterModel.Description = Char.Description;
characterModel.LastCached = ProtoHelpers.ParseDateTime(Char.Timestamp);
characterModel.GUID = Char.GUID;
characterModel.HeadOutfitID = (long)Char.HeadOutfitID;
characterModel.BodyOutfitID = (long)Char.BodyOutfitID;
characterModel.AccountID = Acc.AccountID;
characterModel.AppearanceType = (int)Char.Appearance;
characterModel.City = Char.ResidingCity.UUID;
characterModel.CityName = Char.ResidingCity.Name;
characterModel.CityThumb = (long)Char.ResidingCity.Thumbnail;
characterModel.CityMap = (long)Char.ResidingCity.Map;
characterModel.CityIp = Char.ResidingCity.IP;
characterModel.CityPort = Char.ResidingCity.Port;
var status = db.Characters.CreateCharacter(characterModel);
switch (status)
case LoginDataModel.Entities.CharacterCreationStatus.NameAlreadyExisted:
CCStatusPacket.WriteByte((int)LoginDataModel.Entities.CharacterCreationStatus.NameAlreadyExisted);
Client.SendEncrypted(CCStatusPacket.PacketID, CCStatusPacket.ToArray());
break;
case LoginDataModel.Entities.CharacterCreationStatus.NameTooLong:
CCStatusPacket.WriteByte((int)LoginDataModel.Entities.CharacterCreationStatus.NameTooLong);
Client.SendEncrypted(CCStatusPacket.PacketID, CCStatusPacket.ToArray());
break;
case LoginDataModel.Entities.CharacterCreationStatus.Success:
Guid Token = Guid.NewGuid();
//This actually updates the record, not sure how.
Acc.NumCharacters++;
Thread.MemoryBarrier();
//THIS NEEDS TO HAPPEN FIRST FOR CITY SERVER AUTHENTICATION TO WORK!
foreach (CityInfo CServer in NetworkFacade.CServerListener.CityServers)
if (CServer.UUID.Equals(Char.ResidingCity.UUID, StringComparison.CurrentCultureIgnoreCase))
PacketStream CServerPacket = new PacketStream(0x01, 0);
CServerPacket.WriteHeader();
ushort PacketLength = (ushort)(PacketHeaders.UNENCRYPTED + 4 + (Client.RemoteIP.Length + 1)
+ (Char.GUID.ToString().Length + 1) + (Token.ToString().Length + 1));
CServerPacket.WriteUInt16(PacketLength);
CServerPacket.WriteInt32(Acc.AccountID);
CServerPacket.WritePascalString(Client.RemoteIP);
CServerPacket.WritePascalString(Char.GUID.ToString());
CServerPacket.WritePascalString(Token.ToString());
CServer.Client.Send(CServerPacket.ToArray());
break;
Thread.MemoryBarrier();
CCStatusPacket.WriteByte((int)LoginDataModel.Entities.CharacterCreationStatus.Success);
CCStatusPacket.WritePascalString(Char.GUID.ToString());
CCStatusPacket.WritePascalString(Token.ToString());
Client.SendEncrypted(CCStatusPacket.PacketID, CCStatusPacket.ToArray());
break;
Will it work on sections of code, or simply on the next statement following it? Is there any other ways to make sure my code is run in the order I specified? 

>>Will it work on sections of code.
Yes, Thread.MemoryBarrier() works like a fence that makes sure that the processor that executes the current thread cannot reorder instructions in such a way that any
memory access before the call to the Thread.MemoryBarrier() method is being done after the call to the method.
The lock statement implicitly generates a full memory barrier, i.e. lock (_lock) { ... } is equivalent to Thread.MemoryBarrier(); { ... } Thread.MemoryBarrier(); as far as memory barriers are concerned.
You only need memory barriers when working with shared writable fields though. Please refer to the following page for more information:
http://www.albahari.com/threading/part4.aspx.
Please also remember to mark helpful posts as answer and/or helpful and please start a new thread if you have a new question.

Similar Messages

  • I don't understand the thing you call live bookmarks never used it, and most forums I have used notify VIA E-mail not giving out my E-mail address information when a reply has been made to the thread in question.

    So how do I get notified of updates in this forum? As I said: I don't understand the thing you call LIVE BOOKMARKS I have never used them, and most forums I have used notify VIA E-mail not giving out my E-mail address, or other private information when a reply has been made to the thread in question, so how do I get notified of updates in this forum? I have seen no normal options for setting my viewing preferences used for this forum. Thank You.

    Thanks for your reply via email/msg. He wrote:
    If you are interested in the actual design data for the Xeon processor, go to the Intel site and the actual CPU part numbers are:
    Xeon 4 core - E5.1620v2
    Xeon 6 core - E5.1650v2
    Xeon 8 core - E5.1680v2
    Xeon 12 core - E5.2697v2
    I read that the CPU is easy to swap out but am sure something goes wrong at a certain point - even if solderedon they make material to absorb the solder, making your work area VERY clean.
    My Question now is this, get an 8 core, then replace with 2 3.7 QUAD CHIPS, what would happen?
    I also noticed that the 8 core Mac Pro is 3.0 when in fact they do have a 3.4 8 core chip, so 2 =16? Or if correct, wouldn't you be able to replace a QUAD CHIP WITH THAT?  I;M SURE THEY ARE UO TO SOMETHING AS 1) WE HAVE SEEN NO AUDIO FPU OR PERHAPS I SHOULD CHECK OUT PC MAKERS WINDOWS machines for Sisoft Sandra "B-E-N-C-H-M-A-R-K-S" -
    SOMETHINGS UP AND AM SURE WE'LL ALL BE PLEASED, AS the mac pro      was announced Last year, barely made the December mark, then pushed to January, then February and now April.
    Would rather wait and have it done correct than released to early only to have it benchmarked in audio and found to be slower in a few areas- - - the logical part of my brain is wondering what else I would have to swap out as I am sure it would run, and fine for a while, then, poof....
    PEACE===AM SURE APPLE WILL BLOW US AWAY - they have to figure out how to increase the power for 150 watts or make the GPU work which in regard to FPU, I thought was NVIDIA?

  • Static method,new thread performance question

    Hey guys i just have two questions about two methods used in many controllers/servlets in my app:
    1-what is the difference between calling a static method in a util class or a non static method (like methods dealing with dates i.e getting current time,converting between timezones), which is better ? 2-what is the difference between calling a method(contain too many logic like sending emails) in the controller directly or running this method in a different thread ?

    cs.student wrote:
    Hey guys i just have two questions about two methods used in many controllers/servlets in my app:
    1-what is the difference between calling a static method in a util class or a non static method (like methods dealing with dates i.e getting current time,converting between timezones), which is better ?Depends on the design. It's impossible to say straight why one way would be better than another. Programming isn't that straight forward.
    2-what is the difference between calling a method(contain too many logic like sending emails) in the controller directly or running this method in a different thread ?Threads can be run at the same time. So what you're asking is "what's the difference between doing one thing after another and doing two things at the same time".

  • High Level Thread Implementation Questions

    Hi,
    Before I take the plunge and program my software using threads, I have a few high-level questions.
    I plan on having a simulation class that intantiates software agents, each with different parameters. There is an agent class, with constructor, methods etc. Each agent has a sequence to go through. Once completed, the iteration number is increased and the sequence is repeated. That's simple enough to do.
    The question is, is it worth executing each agent on a different thread?
    If there is around 500 - 1000 lines of code (crude measurement, I know) how many can I expect to thread efficiently?
    One parameter allows an agent to execute n cycles for each global iteration. (i.e. in one iteration, agent A runs once, agent B runs 5 times). Could this be a problem? Should this be controlled outside the agent, or inside it?
    Can I write the code without having to worry about threading, or do I have to design the agent code with threading in mind?
    Will they really run in parallel? It is important that there is no bias to the execution order. I can solve this messily without using threads by randomising the execution order - but that is a messy work around - and why I'm looking at threads.
    Can threaded objects interact easily with non threaded one when execution order is important?
    Are there any other points that I should consider?
    Thanks in advance - any information before I enter this unchartered territory will be truly appreciated!!

    I think you are better off running this all in a single thread.
    Threads make no guarantee as to scheduling. Threads do not increase efficiency (unless your agents block on i/o, or sleep). Threads come with an overhead cost.
    Threads don't guarantee no bias to execution order.
    Threads require synchronization to ensure safe interaction between each other. This is a bit of extra work, and can be a bitch if you're not familiar with it.
    Yes, threads run in parallel. If you have multiple processors then they can truly run in parallel, otherwise they run in time slices.

  • Possible to mark thread as question after marking it as answered?

    I posted this topic a little earlier: http://forums.adobe.com/thread/756129?tstart=0
    I thought I had got all the help I needed, but then followed it up with a further question. Is there any way for me to mark that thread as a question again? Or should I start a new topic? What is the best forum etiquette?

    Salut Nicolas
    Yes you are right especially about the people that are asking something (with the question flaw activated) but it seems that they aren't using the feature of question answered.
    Would it be possible to send an email reminder to the people that have got answers and that they have to response giving the best answer to the questions?
    Unfortunately I have also to agree that it is in deed useless if the questions still pending as non answered, but people have got the correct answer. Sometimes we can see that the people that asked something write back "thanks a lot for your help this is giving me the answer" but the status of the question still in answered.
    regards,
    Hubert

  • Threading general question

    statement : i have some tasks that does not require any user interface so i would like to implement them   with threads instead of thru windows
    But they need to habe a message pump
     i have read all of the relevant reference sections and found only declaration that it is possible
    q1)  what must be made at construction/creaton /beginning time ??
    q2) the thread is  considered to have exited when it ends message handler ??
    q3) is there any complete online training /tutorial or so on topic threading ???
    claudio cannella

    Hi opaklaus,
    Thank you for posting in the MSDN forum. It seems that it is not the correct forum for this issue, since
    this forum is to discuss VS IDE. I am moving your question to the moderator forum ("Where is the forum for..?"). The owner of the forum will direct you to a right forum.
    Best Regards,
    Jack
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • Input thread - loop question

    Sorry for all the annoying questions. Just one more answered would be great, I know the problem in this code is my Input class only reads and sends one line to the server and as it isn't in a loop thethread terminates immediately, after one line leaving only the thread that's reading data from the server. I've tried a few loops but nothing seems to work. Can anyone point out what kind of while loop and where i can put it in.
    import java.net.*;
    import java.io.*;
    class Input extends Thread
    private PrintWriter toServer;
    private BufferedReader keyBoard;
    private Socket socket;
    public Input(Socket sock)
    socket = sock;
    public void run()
    keyBoard = new BufferedReader(
    new InputStreamReader (System.in));
    try {
    toServer = new PrintWriter(
    new OutputStreamWriter(
    socket.getOutputStream()),true);
    catch(Exception e) {
    String command ="";
    try {
    command = keyBoard.readLine();
    catch (IOException e) {
    toServer.println(command);
    }

    try
    try {
         command = keyBoard.readLine();
         while (command != null) {
               toServer.println(command);
              command = keyBoard.readLine();
    } catch (IOException e) {
         e.printSTackTrace();
    }

  • WL 7.0 thread dump question

    Hi,
    I am using weblogic 7.0 windows 2000. I have seen unique behaviour with this,
    if the server is not accessed for prolonged time, say overnight and in the morning
    if I want to take thread dump(by hitting Ctrl+break) it will not work. I need
    to restart server to get thread dump, any idea about this?
    Yogesh

    Ctrl+break is a JVM interrupt command, not WLS.
    Is the server accessible? I mean does it respond for PING
    BTW, what JDk you are using?
    Kumar
    Yogesh wrote:
    Hi,
    I am using weblogic 7.0 windows 2000. I have seen unique behaviour with this,
    if the server is not accessed for prolonged time, say overnight and in the morning
    if I want to take thread dump(by hitting Ctrl+break) it will not work. I need
    to restart server to get thread dump, any idea about this?
    Yogesh

  • Thread pool Question

    Hi,
    Can any one please guide me How do I create a thread pool?
    Regards,
    Rajesh Kannan. N

    1) Dig large hole
    2) Fill with water.
    3) Invite thread friends over on hot summer days

  • Thread creation questions

    I'm creating a diary type program (dates and times of various things) and am having a few problems creating threads. I'm understanding how to create the threads I think, but from what I've been able to understand, everything that the tread runs is in the run() method only. So how do I make it run other things?
    for instance, I have a search method which searches through a load of objects (the tasks). Can I run this search method in its own thread?
    Thanks
    Adrian

    agehoops wrote:
    Well I plan to put a GUI on the top of it so obviously that'll have its own thread but I don't want anything to lock up while it's searching through potentially hundreds of objectsThat's a little better. If you are using Swing and Java 6, have a look at using a SwingWorker object. It smooths over some of the difficulties of doing Threading with Swing. There's a decent tutorial on using this here:
    [Lesson: Concurrency in Swing|http://java.sun.com/docs/books/tutorial/uiswing/concurrency/index.html]

  • Thread Dump Question

    Hi,
    At times our users experience very slow response times. During one such incident I captured a few thread dumps ( 3-4 dumps at 5-10 second intervals). In all the thread dumps I find one thing in common, most of the threads look like they are busy writing to a socket...
    ===================================================
    "ExecuteThread: '22' for queue: 'weblogic.kernel.Default'" daemon prio=5 tid=0xec85f8 nid=0x21 runnable [ce780000..ce7819bc]
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    at weblogic.servlet.internal.ChunkUtils.writeChunkNoTransfer(ChunkUtils.java:260)
    at weblogic.servlet.internal.ChunkUtils.writeChunks(ChunkUtils.java:225)
    at weblogic.servlet.internal.ChunkOutput.flush(ChunkOutput.java:296)
    at weblogic.servlet.internal.ChunkOutput.checkForFlush(ChunkOutput.java:371)
    at weblogic.servlet.internal.ChunkOutput.writeStream(ChunkOutput.java:326)
    at weblogic.servlet.internal.ChunkOutputWrapper.writeStream(ChunkOutputWrapper.java:154)
    at weblogic.servlet.internal.ServletOutputStreamImpl.writeStream(ServletOutputStreamImpl.java:584)
    at weblogic.servlet.internal.ServletOutputStreamImpl.writeStream(ServletOutputStreamImpl.java:573)
    at weblogic.servlet.FileServlet.sendFile(FileServlet.java:571)
    at weblogic.servlet.FileServlet.service(FileServlet.java:208)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:971)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:402)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6350)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
    at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3635)
    at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2585)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
    =========================================================
    I have very limited knowledge about the app and I don't see any method calls in the thread dump to pinpoint the source of the bottleneck. Any ideas on how I should proceed and what information if any I can get from the above thread dump.
    Thank you so much..
    Wap

    Hi,
    I collected a few thread dumps when our servers were slow today and almost all the threads were in the same state as in the first post. I used the console to check what the threads were doing and it appeared that that they were fetching a .js (javascript) file. I consulted the developers and they say all the pages in the app have javascript embedded in them. I fail to understand how this could cause the problem. There were no JDBC connections that were being used actively. Is there any way I can drill down to the source of the problem ( Maybe a particular page is causing the problem). We don't have any performance/application analysis tools. Any pointers to information?
    Thank you so much..
    Wap
    Here is the thread dump...( in the console, I see this message.. HTTP Request: /target/source/JAVASCRIPT/SCRIPTS.JS)
    Full thread dump Java HotSpot(TM) Client VM (1.4.1_05-b01 mixed mode):
    "ExecuteThread: '2' for queue: 'weblogic.kernel.Non-Blocking'" daemon prio=5 tid=0x3c14b28 nid=0x48 in Object.wait() [ca881000..ca8819bc]
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:426)
    at weblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:145)
    - locked <dbde7868> (a weblogic.kernel.ExecuteThread)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:164)
    "ExecuteThread: '1' for queue: 'weblogic.kernel.Non-Blocking'" daemon prio=5 tid=0x3c13578 nid=0x47 in Object.wait() [ca981000..ca9819bc]
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:426)
    at weblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:145)
    - locked <dbde7398> (a weblogic.kernel.ExecuteThread)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:164)
    "ExecuteThread: '0' for queue: 'weblogic.kernel.Non-Blocking'" daemon prio=5 tid=0x3c13090 nid=0x46 in Object.wait() [caa81000..caa819bc]
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:426)
    at weblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:145)
    - locked <dbde6ea8> (a weblogic.kernel.ExecuteThread)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:164)
    "ListenThread.Default" prio=5 tid=0x3ca4e10 nid=0x45 runnable [cab81000..cab819bc]
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:353)
    - locked <dbdac478> (a java.net.PlainSocketImpl)
    at java.net.ServerSocket.implAccept(ServerSocket.java:448)
    at java.net.ServerSocket.accept(ServerSocket.java:419)
    at weblogic.socket.WeblogicServerSocket.accept(WeblogicServerSocket.java:24)
    at weblogic.t3.srvr.ListenThread.accept(ListenThread.java:739)
    at weblogic.t3.srvr.ListenThread.run(ListenThread.java:292)
    "DefaultQuartzScheduler_QuartzSchedulerThread" prio=5 tid=0x4453f80 nid=0x44 waiting on condition [cb381000..cb3819bc]
    at java.lang.Thread.sleep(Native Method)
    at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:397)
    "DefaultQuartzScheduler_Worker-9" prio=5 tid=0x44532f8 nid=0x43 in Object.wait() [cb481000..cb4819bc]
    at java.lang.Object.wait(Native Method)
    at org.quartz.simpl.SimpleThreadPool.getNextRunnable(SimpleThreadPool.java:418)
    - locked <dbe72108> (a java.lang.Object)
    at org.quartz.simpl.SimpleThreadPool.access$000(SimpleThreadPool.java:53)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:509)
    "DefaultQuartzScheduler_Worker-8" prio=5 tid=0x4452748 nid=0x42 in Object.wait() [cb581000..cb5819bc]
    at java.lang.Object.wait(Native Method)
    at org.quartz.simpl.SimpleThreadPool.getNextRunnable(SimpleThreadPool.java:418)
    - locked <dbe72108> (a java.lang.Object)
    at org.quartz.simpl.SimpleThreadPool.access$000(SimpleThreadPool.java:53)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:509)
    "DefaultQuartzScheduler_Worker-7" prio=5 tid=0x4451b98 nid=0x41 in Object.wait() [cb681000..cb6819bc]
    at java.lang.Object.wait(Native Method)
    at org.quartz.simpl.SimpleThreadPool.getNextRunnable(SimpleThreadPool.java:418)
    - locked <dbe72108> (a java.lang.Object)
    at org.quartz.simpl.SimpleThreadPool.access$000(SimpleThreadPool.java:53)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:509)
    "DefaultQuartzScheduler_Worker-6" prio=5 tid=0x4451018 nid=0x40 in Object.wait() [cb781000..cb7819bc]
    at java.lang.Object.wait(Native Method)
    at org.quartz.simpl.SimpleThreadPool.getNextRunnable(SimpleThreadPool.java:418)
    - locked <dbe72108> (a java.lang.Object)
    at org.quartz.simpl.SimpleThreadPool.access$000(SimpleThreadPool.java:53)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:509)
    "DefaultQuartzScheduler_Worker-5" prio=5 tid=0x4461c70 nid=0x3f in Object.wait() [cb881000..cb8819bc]
    at java.lang.Object.wait(Native Method)
    at org.quartz.simpl.SimpleThreadPool.getNextRunnable(SimpleThreadPool.java:418)
    - locked <dbe72108> (a java.lang.Object)
    at org.quartz.simpl.SimpleThreadPool.access$000(SimpleThreadPool.java:53)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:509)
    "DefaultQuartzScheduler_Worker-4" prio=5 tid=0x4461200 nid=0x3e in Object.wait() [cb981000..cb9819bc]
    at java.lang.Object.wait(Native Method)
    at org.quartz.simpl.SimpleThreadPool.getNextRunnable(SimpleThreadPool.java:418)
    - locked <dbe72108> (a java.lang.Object)
    at org.quartz.simpl.SimpleThreadPool.access$000(SimpleThreadPool.java:53)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:509)
    "DefaultQuartzScheduler_Worker-3" prio=5 tid=0x4460188 nid=0x3d in Object.wait() [cba81000..cba819bc]
    at java.lang.Object.wait(Native Method)
    at org.quartz.simpl.SimpleThreadPool.getNextRunnable(SimpleThreadPool.java:418)
    - locked <dbe72108> (a java.lang.Object)
    at org.quartz.simpl.SimpleThreadPool.access$000(SimpleThreadPool.java:53)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:509)
    "DefaultQuartzScheduler_Worker-2" prio=5 tid=0x3e42230 nid=0x3c in Object.wait() [cbb81000..cbb819bc]
    at java.lang.Object.wait(Native Method)
    at org.quartz.simpl.SimpleThreadPool.getNextRunnable(SimpleThreadPool.java:418)
    - locked <dbe72108> (a java.lang.Object)
    at org.quartz.simpl.SimpleThreadPool.access$000(SimpleThreadPool.java:53)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:509)
    "DefaultQuartzScheduler_Worker-1" prio=5 tid=0x3e41bf0 nid=0x3b in Object.wait() [cbc81000..cbc819bc]
    at java.lang.Object.wait(Native Method)
    at org.quartz.simpl.SimpleThreadPool.getNextRunnable(SimpleThreadPool.java:418)
    - locked <dbe72108> (a java.lang.Object)
    at org.quartz.simpl.SimpleThreadPool.access$000(SimpleThreadPool.java:53)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:509)
    "DefaultQuartzScheduler_Worker-0" prio=5 tid=0x44505e0 nid=0x3a in Object.wait() [cbd81000..cbd819bc]
    at java.lang.Object.wait(Native Method)
    at org.quartz.simpl.SimpleThreadPool.getNextRunnable(SimpleThreadPool.java:418)
    - locked <dbe72108> (a java.lang.Object)
    at org.quartz.simpl.SimpleThreadPool.access$000(SimpleThreadPool.java:53)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:509)
    "Thread-7" prio=5 tid=0x7f3588 nid=0x39 in Object.wait() [ccc81000..ccc819bc]
    at java.lang.Object.wait(Native Method)
    - waiting on <da41e0b0> (a java.util.TaskQueue)
    at java.util.TimerThread.mainLoop(Timer.java:429)
    - locked <da41e0b0> (a java.util.TaskQueue)
    at java.util.TimerThread.run(Timer.java:382)
    "Thread-6" prio=5 tid=0x130f00 nid=0x38 in Object.wait() [ccd81000..ccd819bc]
    at java.lang.Object.wait(Native Method)
    - waiting on <da22c378> (a java.util.TaskQueue)
    at java.util.TimerThread.mainLoop(Timer.java:429)
    - locked <da22c378> (a java.util.TaskQueue)
    at java.util.TimerThread.run(Timer.java:382)
    "Thread-5" daemon prio=5 tid=0x4dda20 nid=0x37 in Object.wait() [cd181000..cd1819bc]
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:426)
    at java.util.TimerThread.mainLoop(Timer.java:403)
    - locked <da233248> (a java.util.TaskQueue)
    at java.util.TimerThread.run(Timer.java:382)
    "weblogic.health.CoreHealthMonitor" daemon prio=5 tid=0x8e7078 nid=0x36 waiting on condition [cd381000..cd3819bc]
    at java.lang.Thread.sleep(Native Method)
    at weblogic.t3.srvr.CoreHealthMonitorThread.run(CoreHealthMonitorThread.java:127)
    "Thread-4" prio=5 tid=0x8b36e0 nid=0x35 in Object.wait() [cd481000..cd4819bc]
    at java.lang.Object.wait(Native Method)
    - waiting on <da01f1b0> (a java.util.TaskQueue)
    at java.util.TimerThread.mainLoop(Timer.java:429)
    - locked <da01f1b0> (a java.util.TaskQueue)
    at java.util.TimerThread.run(Timer.java:382)
    "ExecuteThread: '0' for queue: 'Multicast'" daemon prio=5 tid=0x8b2760 nid=0x34 in Object.wait() [cd581000..cd5819bc]
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:426)
    at weblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:145)
    - locked <d9fee6f8> (a weblogic.kernel.ExecuteThread)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:164)
    "LDAPConnThread-0 ldap://10.63.7.20:7060" daemon prio=5 tid=0x7bd860 nid=0x33 runnable [cd681000..cd6819bc]
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:129)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:183)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:201)
    - locked <d9f687d0> (a java.io.BufferedInputStream)
    at netscape.ldap.ber.stream.BERElement.getElement(BERElement.java:101)
    at netscape.ldap.LDAPConnThread.run(LDAPConnThread.java:538)
    at java.lang.Thread.run(Thread.java:536)
    "VDE Transaction Processor Thread" prio=2 tid=0xd22090 nid=0x31 in Object.wait() [cd781000..cd7819bc]
    at java.lang.Object.wait(Native Method)
    - waiting on <d9f48240> (a com.octetstring.vde.backend.standard.TransactionProcessor)
    at java.lang.Object.wait(Object.java:426)
    at com.octetstring.vde.backend.standard.TransactionProcessor.waitChange(TransactionProcessor.java:356)
    - locked <d9f48240> (a com.octetstring.vde.backend.standard.TransactionProcessor)
    at com.octetstring.vde.backend.standard.TransactionProcessor.run(TransactionProcessor.java:212)
    "ExecuteThread: '2' for queue: 'weblogic.admin.RMI'" daemon prio=5 tid=0x85e788 nid=0x30 in Object.wait() [cd881000..cd8819bc]
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:426)
    at weblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:145)
    - locked <d9eaf3c0> (a weblogic.kernel.ExecuteThread)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:164)
    "ExecuteThread: '1' for queue: 'weblogic.admin.RMI'" daemon prio=5 tid=0x85ddf0 nid=0x2f in Object.wait() [cd981000..cd9819bc]
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:426)
    at weblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:145)
    - locked <d9eaeea0> (a weblogic.kernel.ExecuteThread)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:164)
    "ExecuteThread: '0' for queue: 'weblogic.admin.RMI'" daemon prio=5 tid=0x85dc58 nid=0x2e in Object.wait() [cda81000..cda819bc]
    at java.lang.Object.wait(Native Method)
    - waiting on <d9eae960> (a weblogic.kernel.ExecuteThread)
    at java.lang.Object.wait(Object.java:426)
    at weblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:145)
    - locked <d9eae960> (a weblogic.kernel.ExecuteThread)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:164)
    "ExecuteThread: '2' for queue: 'weblogic.socket.Muxer'" daemon prio=5 tid=0xe9b20 nid=0x2d runnable [cdb81000..cdb819bc]
    at weblogic.socket.PosixSocketMuxer.poll(Native Method)
    at weblogic.socket.PosixSocketMuxer.processSockets(PosixSocketMuxer.java:100)
    - locked <d9c14f40> (a java.lang.String)
    at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
    "ExecuteThread: '1' for queue: 'weblogic.socket.Muxer'" daemon prio=5 tid=0xe90b0 nid=0x2c waiting for monitor entry [cdc81000..cdc819bc]
    at weblogic.socket.PosixSocketMuxer.processSockets(PosixSocketMuxer.java:91)
    - waiting to lock <d9c14f40> (a java.lang.String)
    at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
    "ExecuteThread: '0' for queue: 'weblogic.socket.Muxer'" daemon prio=5 tid=0xe8ee0 nid=0x2b waiting for monitor entry [cdd81000..cdd819bc]
    at weblogic.socket.PosixSocketMuxer.processSockets(PosixSocketMuxer.java:91)
    - waiting to lock <d9c14f40> (a java.lang.String)
    at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
    "weblogic.security.SpinnerRandomSource" daemon prio=5 tid=0xed7850 nid=0x2a in Object.wait() [cde81000..cde819bc]
    at java.lang.Object.wait(Native Method)
    - waiting on <d9c3aee8> (a java.lang.Object)
    at java.lang.Object.wait(Object.java:426)
    at weblogic.security.SpinnerRandomBitsSource.run(SpinnerRandomBitsSource.java:60)
    - locked <d9c3aee8> (a java.lang.Object)
    at java.lang.Thread.run(Thread.java:536)
    "weblogic.time.TimeEventGenerator" daemon prio=9 tid=0xed27b0 nid=0x29 runnable [cdf81000..cdf819bc]
    at java.lang.Object.wait(Native Method)
    at weblogic.time.common.internal.TimeTable.snooze(TimeTable.java:271)
    - locked <d9c3af58> (a weblogic.time.common.internal.TimeTable)
    at weblogic.time.common.internal.TimeEventGenerator.run(TimeEventGenerator.java:118)
    at java.lang.Thread.run(Thread.java:536)
    "ExecuteThread: '4' for queue: 'weblogic.kernel.System'" daemon prio=5 tid=0xecd628 nid=0x28 in Object.wait() [ce081000..ce0819bc]
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:426)
    at weblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:145)
    - locked <d9c3afd0> (a weblogic.kernel.ExecuteThread)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:164)
    "ExecuteThread: '3' for queue: 'weblogic.kernel.System'" daemon prio=5 tid=0xecca78 nid=0x27 in Object.wait() [ce181000..ce1819bc]
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:426)
    at weblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:145)
    - locked <d9c3b050> (a weblogic.kernel.ExecuteThread)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:164)
    "ExecuteThread: '2' for queue: 'weblogic.kernel.System'" daemon prio=5 tid=0xecbec8 nid=0x26 in Object.wait() [ce281000..ce2819bc]
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:426)
    at weblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:145)
    - locked <d9c3b0d0> (a weblogic.kernel.ExecuteThread)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:164)
    "ExecuteThread: '1' for queue: 'weblogic.kernel.System'" daemon prio=5 tid=0xecb318 nid=0x25 in Object.wait() [ce381000..ce3819bc]
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:426)
    at weblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:145)
    - locked <d9c3b150> (a weblogic.kernel.ExecuteThread)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:164)
    "ExecuteThread: '0' for queue: 'weblogic.kernel.System'" daemon prio=5 tid=0xeca768 nid=0x24 in Object.wait() [ce481000..ce4819bc]
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:426)
    at weblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:145)
    - locked <d9c3b1d0> (a weblogic.kernel.ExecuteThread)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:164)
    "ExecuteThread: '24' for queue: 'weblogic.kernel.Default'" daemon prio=5 tid=0xec9bb8 nid=0x23 runnable [ce581000..ce5819bc]
    at java.net.PlainDatagramSocketImpl.receive(Native Method)
    - waiting to lock <da233350> (a java.net.PlainDatagramSocketImpl)
    at java.net.DatagramSocket.receive(DatagramSocket.java:680)
    - locked <d8851ca8> (a java.net.DatagramPacket)
    - locked <da233380> (a java.net.MulticastSocket)
    at weblogic.cluster.FragmentSocket.receive(FragmentSocket.java:169)
    at weblogic.cluster.MulticastManager.execute(MulticastManager.java:377)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
    "ExecuteThread: '23' for queue: 'weblogic.kernel.Default'" daemon prio=5 tid=0xec9008 nid=0x22 runnable [ce680000..ce6819bc]
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    at weblogic.servlet.internal.ChunkUtils.writeChunkNoTransfer(ChunkUtils.java:260)
    at weblogic.servlet.internal.ChunkUtils.writeChunks(ChunkUtils.java:225)
    at weblogic.servlet.internal.ChunkOutput.flush(ChunkOutput.java:296)
    at weblogic.servlet.internal.ChunkOutput.checkForFlush(ChunkOutput.java:371)
    at weblogic.servlet.internal.ChunkOutput.writeStream(ChunkOutput.java:326)
    at weblogic.servlet.internal.ChunkOutputWrapper.writeStream(ChunkOutputWrapper.java:154)
    at weblogic.servlet.internal.ServletOutputStreamImpl.writeStream(ServletOutputStreamImpl.java:584)
    at weblogic.servlet.internal.ServletOutputStreamImpl.writeStream(ServletOutputStreamImpl.java:573)
    at weblogic.servlet.FileServlet.sendFile(FileServlet.java:571)
    at weblogic.servlet.FileServlet.service(FileServlet.java:208)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:971)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:402)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6350)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
    at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3635)
    at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2585)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
    "ExecuteThread: '22' for queue: 'weblogic.kernel.Default'" daemon prio=5 tid=0xec8458 nid=0x21 runnable [ce780000..ce7819bc]
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    at weblogic.servlet.internal.ChunkUtils.writeChunkNoTransfer(ChunkUtils.java:260)
    at weblogic.servlet.internal.ChunkUtils.writeChunks(ChunkUtils.java:225)
    at weblogic.servlet.internal.ChunkOutput.flush(ChunkOutput.java:296)
    at weblogic.servlet.internal.ChunkOutput.checkForFlush(ChunkOutput.java:371)
    at weblogic.servlet.internal.ChunkOutput.writeStream(ChunkOutput.java:326)
    at weblogic.servlet.internal.ChunkOutputWrapper.writeStream(ChunkOutputWrapper.java:154)
    at weblogic.servlet.internal.ServletOutputStreamImpl.writeStream(ServletOutputStreamImpl.java:584)
    at weblogic.servlet.internal.ServletOutputStreamImpl.writeStream(ServletOutputStreamImpl.java:573)
    at weblogic.servlet.FileServlet.sendFile(FileServlet.java:571)
    at weblogic.servlet.FileServlet.service(FileServlet.java:208)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:971)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:402)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6350)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
    at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3635)
    at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2585)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
    "ExecuteThread: '21' for queue: 'weblogic.kernel.Default'" daemon prio=5 tid=0xec78a8 nid=0x20 runnable [ce880000..ce8819bc]
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    at weblogic.servlet.internal.ChunkUtils.writeChunkNoTransfer(ChunkUtils.java:260)
    at weblogic.servlet.internal.ChunkUtils.writeChunks(ChunkUtils.java:225)
    at weblogic.servlet.internal.ChunkOutput.flush(ChunkOutput.java:296)
    at weblogic.servlet.internal.ChunkOutput.checkForFlush(ChunkOutput.java:371)
    at weblogic.servlet.internal.ChunkOutput.writeStream(ChunkOutput.java:326)
    at weblogic.servlet.internal.ChunkOutputWrapper.writeStream(ChunkOutputWrapper.java:154)
    at weblogic.servlet.internal.ServletOutputStreamImpl.writeStream(ServletOutputStreamImpl.java:584)
    at weblogic.servlet.internal.ServletOutputStreamImpl.writeStream(ServletOutputStreamImpl.java:573)
    at weblogic.servlet.FileServlet.sendFile(FileServlet.java:571)
    at weblogic.servlet.FileServlet.service(FileServlet.java:208)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:971)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:402)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6350)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
    at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3635)
    at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2585)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
    "ExecuteThread: '20' for queue: 'weblogic.kernel.Default'" daemon prio=5 tid=0xec62e8 nid=0x1f runnable [ce980000..ce9819bc]
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    at weblogic.servlet.internal.ChunkUtils.writeChunkNoTransfer(ChunkUtils.java:260)
    at weblogic.servlet.internal.ChunkUtils.writeChunks(ChunkUtils.java:225)
    at weblogic.servlet.internal.ChunkOutput.flush(ChunkOutput.java:296)
    at weblogic.servlet.internal.ChunkOutput.checkForFlush(ChunkOutput.java:371)
    at weblogic.servlet.internal.ChunkOutput.writeStream(ChunkOutput.java:326)
    at weblogic.servlet.internal.ChunkOutputWrapper.writeStream(ChunkOutputWrapper.java:154)
    at weblogic.servlet.internal.ServletOutputStreamImpl.writeStream(ServletOutputStreamImpl.java:584)
    at weblogic.servlet.internal.ServletOutputStreamImpl.writeStream(ServletOutputStreamImpl.java:573)
    at weblogic.servlet.FileServlet.sendFile(FileServlet.java:571)
    at weblogic.servlet.FileServlet.service(FileServlet.java:208)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:971)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:402)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6350)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
    at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3635)
    at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2585)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
    "ExecuteThread: '19' for queue: 'weblogic.kernel.Default'" daemon prio=5 tid=0xec5b38 nid=0x1e in Object.wait() [cea81000..cea819bc]
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:426)
    at weblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:145)
    - locked <d9c3b4d0> (a weblogic.kernel.ExecuteThread)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:164)
    "ExecuteThread: '18' for queue: 'weblogic.kernel.Default'" daemon prio=5 tid=0xec4f88 nid=0x1d runnable [ceb80000..ceb819bc]
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    at weblogic.servlet.internal.ChunkUtils.writeChunkNoTransfer(ChunkUtils.java:260)
    at weblogic.servlet.internal.ChunkUtils.writeChunks(ChunkUtils.java:225)
    at weblogic.servlet.internal.ChunkOutput.flush(ChunkOutput.java:296)
    at weblogic.servlet.internal.ChunkOutput.checkForFlush(ChunkOutput.java:371)
    at weblogic.servlet.internal.ChunkOutput.writeStream(ChunkOutput.java:326)
    at weblogic.servlet.internal.ChunkOutputWrapper.writeStream(ChunkOutputWrapper.java:154)
    at weblogic.servlet.internal.ServletOutputStreamImpl.writeStream(ServletOutputStreamImpl.java:584)
    at weblogic.servlet.internal.ServletOutputStreamImpl.writeStream(ServletOutputStreamImpl.java:573)
    at weblogic.servlet.FileServlet.sendFile(FileServlet.java:571)
    at weblogic.servlet.FileServlet.service(FileServlet.java:208)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:971)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:402)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6350)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
    at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3635)
    at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2585)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
    "ExecuteThread: '17' for queue: 'weblogic.kernel.Default'" daemon prio=5 tid=0xec43d8 nid=0x1c runnable [cec80000..cec819bc]
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    at weblogic.servlet.internal.ChunkUtils.writeChunkNoTransfer(ChunkUtils.java:260)
    at weblogic.servlet.internal.ChunkUtils.writeChunks(ChunkUtils.java:225)
    at weblogic.servlet.internal.ChunkOutput.flush(ChunkOutput.java:296)
    at weblogic.servlet.internal.Chun

  • General Threading Theory Question

    Consider the following class:
    public class Stringer
    public static final Stringer Singleton = new Stringer();
    private Stringer() { }
    public String callToString(Object obj)
    return obj.toString();
    Now consider a gang of threads that are all interested it using the only instance of Stringer ever created (Singleton) to invoke the toString() method of various objects purely for fun. Is Stringer thread safe?
    Stringer has no state in of itself--it would seem that any thread could context switch in and out of the Singleton Stringer at any point at any time and not corrupt Singleton's state in any way since it's nature is behavioral only.
    However, is simply having two threads accessing an object at the same time problematic? This could not happen on a uniprocessing machine, but on a multiprocessing machine both processors could be running a thread that tries to invoke Singleton.callToString at the same instance of time. Is this a problem? Does Singleton need a lock purely to provide thread safety in a multiprocessing enviornemnt?

    No lock is needed. The only potential problem I see would be calling callToString from multiple threads, using the same object parameter, and for the toString method to be defined in a non-thread-safe manner. Not likely to happen.

  • Official thinkpad x61 thread. Questions & tips'n'tricks! (i686)

    Get X running:
    pacman -S xorg xf86-video-intel hwd
    hwd -xa (will autoconfig a xorg.conf)
    Editing the autoconfigured xorg.
    nano /.../X11/xorg.conf (forgot what folder xorg.conf is placed in)
    In xorg.conf you can change the keyboard layout to "thinkpad60" and scroll to the bottom and change the color depth to 24bit.
    And now you should be able to start X.
    Getting the wireless wifi to work.
    pacman -S iwlwifi-4965-ucode (the popper wifi drivers)
    Changing the sensitivity and speed of the trackpoint
    echo -n 250 > /sys/devices/platform/i8042/serio1/sensitivity
    echo -n 160 > /sys/devices/platform/i8042/serio1/speed
    Put this in your rc.local . 250&160 are the numbers that decides what sensitivity and speed the trackpoint will have. And you can of course change them after your demands.
    [I dont't have linux installed on  my thinkpad atm so it's a little hard to help. But I will install arch on my thinkpad later and edit&complete this guide.]
    Last edited by bredin (2008-10-18 11:50:37)

    zorg wrote:Hi, is there an arch-newbie friendly account of how to install arch on a X61, somewhere ?
    I'd like to try Arch but I wonder if that might not be a bit too much for me to chew and whether I should go with something more beginner friendly like Ubuntu ?
    Hi zorg -
    This is my first post on the Arch forums. I am a seasoned windows systems engineer with passable *nix skills. I recently (not sure what came over me) decided to give Linux a shot and started out with Ubuntu. It was ok but as a command line guy and someone who likes to do stuff manually and automate his environment, I didn't appreciate all the "autoconfig" and wizards in Ubuntu. I am also a rogue individual by nature and try to blaze my own trail so I wanted to use something different. Next distro I tried was Mepis, which is excellent for beginners and I actually liked it but had a lot of issues with hardware compatibility. I only had it running about a week but I can say that it is an excellent inroad into Linux and very easy to setup.
    Now on to Arch What drew me (and countless others) to this distro was a few simple principles:
    1. By and large, the EXTREMELY detailed and well organized documentation. I have learned so much not just about Arch but about Linux in general by reading these Wiki's, many of them several times over.
    2. Choice. You get to choose what you want. Arch is a bare-bones install and comes with limited software/addons. It also comes with no gui bu default. Everything that goes on the system is a choice you get to make personally. This might be viewed as a downside by some but for me it is a huge plus. It may seem complicated and scary to a newbie but it is my opinion that, coupled with the excellent documentation, it is actually very newbie friendly (assuming you are willing to tinker a bit and download/edit some files). Arch Linux developers and users believe that trying to hide the complexities of a system actually results in an even more complex system, and is therefore to be avoided.
    3. Everything just works. Hardware was detected easily, wireless worked relatively easily, dual monitors, etc.
    4. Stability. Arch is one of the more stable distros and is well supported. It is also a "rolling release" distribution which means you can update as often or not as you please.
    5. Arch is smoking fast! (boots up in less than 30 seconds).
    I have been running Arch on my office desktop for two weeks now and I am loving it. Compiz is quite nice as well and puts MS Aero to shame. I even installed it on an old T43 Thinkpad lying around at home. I run it as a server with no DE (uses just 40MB RAM!)
    I'll try to post more later but I do recommend you at least give Arch a try and let everyone know how it goes.

  • Handling Threads and Memory

    I'm sorry if this is a cross post to my StringBuffer problem. I have run a test that instantiates the object in question and the memory gets collected so I don't think it's that. My question is on how memory pertaining to Threads is handled.
    In my application I have a Thread array that launches X number of Threads. Currently 5. When an object wants a job run, the static Thread pool looks at the current thread and sees if it is still working. If it is, we sleep until it is available. Then I give it another job to do, start it, and move to the next thread.
    Question 1 -
    In a Thread [] is it better to replace the Thread at position x as in
    threads[a] = new Thread();
    threads[a].start();
    or is it better to change some parameter in the thread and then call
    start() again?
    Question 2 -
    I am currently using the second method. In my Thread object I have a MessageObject which contains a StringBuffer, which is eating memory. These MessageObject's are increasing. Some are being collected but many are staying live in the system and causing a memory error. When I do the following....
    MyThread.MessageObject = new MessageObject()
    That should make the original object available for cleanup right?
    Should I call finalize on the MessageObject before replacing it?
    Thanks you for any insights.

    If you want to use thread pools, and you can use JDK 5.0 (formerly known as J2SDK 1.5, codename Tiger), try using the java.util.concurrent package instead of writing your own thread pool (it's really difficult to make a thread pool right).
    If you can't use JDK 5.0, you can try the original util.concurrent package ( http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html ) from Doug Lea. It's used in the JBoss Application Server, so it's tested and reliable.
    If you need to use an object pool, try using the Commons Pool Component from Jakarta Apache: http://jakarta.apache.org/commons/pool/

  • Event Dispatch Thread Hangs, what is wrong?

    The Event Dispatch Thread Hangs when showing a modal dialog while running a
    SwingWorker Thread.
    I have included my code at the bottom of the page. There are three classes. I have posted a bug report to red hat. But I want to make sure my code is correct.
    My test case just puts the SwingWorker to sleep
    but the problem occurs if I do something real, like connect to a database, etc.
    Also I have tried little different variations of the logic calling
    setVisible(true)/(false) in different places and the same problem occurs.
    It seems to work with Sun JDK, note I am using IcedTea with Fedora Core 8.
    Version-Release number of selected component (if applicable):
    [szakrews@tuxtel ~]$ java -version
    java version "1.7.0"
    IcedTea Runtime Environment (build 1.7.0-b21)
    IcedTea Client VM (build 1.7.0-b21, mixed mode)How reproducible:
    Every couple times.
    javac TestClass2
    java TestClass2eventually it will hang. If it doesn't try again.
    You don't have to wait for the program to finish either.
    The program runs the Dialog 10 times but it never works or fails in the middle, it will either work or fail from the first dialog displayed.
    I have included a thread dump. That is about the most informative information I can get. Neither tracing nor writing a custom ThreadQueue or Drawing Manager to trace events produces any helpful information.
    Actual results:
    The JProccessBar won't move, and the SwingWorker finishes but the done() method is never run. The PROGRAM is not hung however because if I close the dialog then it will continue.
    Expected results:
    The JProccessBar should always move and the SwingWorker should always run the done() method.
    Additional info:
    java thread dump after freeze, taken with kill -s SIGQUIT <pid>
    2008-06-25 12:25:50
    Full thread dump IcedTea Client VM (1.7.0-b21 mixed mode):
    "DestroyJavaVM" prio=10 tid=0x938afc00 nid=0x1419 waiting on condition
    [0x00000000..0x0018a074]
       java.lang.Thread.State: RUNNABLE
    "AWT-EventQueue-0" prio=10 tid=0x938ae400 nid=0x1429 in Object.wait()
    [0x07f96000..0x07f96f04]
       java.lang.Thread.State: WAITING (on object monitor)
            at java.lang.Object.wait(Native Method)
            - waiting on <0x96748f80> (a java.awt.EventQueue)
            at java.lang.Object.wait(Object.java:503)
            at java.awt.EventQueue.getNextEvent(EventQueue.java:485)
            - locked <0x96748f80> (a java.awt.EventQueue)
            at
    java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:248)
            at
    java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:201)
            at
    java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:195)
            at java.awt.Dialog$1.run(Dialog.java:1073)
            at java.awt.Dialog$3.run(Dialog.java:1127)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.awt.Dialog.show(Dialog.java:1125)
            at java.awt.Component.show(Component.java:1456)
            at java.awt.Component.setVisible(Component.java:1408)
            at java.awt.Window.setVisible(Window.java:871)
            at java.awt.Dialog.setVisible(Dialog.java:1012)
            at net.xtel.production.WaitDialog.showWaitDialog(WaitDialog.java:72)
            at net.xtel.production.WaitDialog.showWaitDialog(WaitDialog.java:102)
            at TestClass2.showWait(TestClass2.java:79)
            at TestClass2.createAndShowGUI(TestClass2.java:126)
            at TestClass2.access$0(TestClass2.java:114)
            at TestClass2$3.run(TestClass2.java:138)
            at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:227)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:603)
            at
    java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:276)
            at
    java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:201)
            at
    java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:191)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:186)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:178)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:139)
    "AWT-Shutdown" prio=10 tid=0x938ad000 nid=0x1428 in Object.wait()
    [0x03ea7000..0x03ea7f84]
       java.lang.Thread.State: WAITING (on object monitor)
            at java.lang.Object.wait(Native Method)
            - waiting on <0x96749268> (a java.lang.Object)
            at java.lang.Object.wait(Object.java:503)
            at sun.awt.AWTAutoShutdown.run(AWTAutoShutdown.java:281)
            - locked <0x96749268> (a java.lang.Object)
            at java.lang.Thread.run(Thread.java:675)
    "AWT-XAWT" daemon prio=10 tid=0x938a8400 nid=0x1423 runnable
    [0x02ccc000..0x02ccd104]
       java.lang.Thread.State: RUNNABLE
            at sun.awt.X11.XToolkit.waitForEvents(Native Method)
            at sun.awt.X11.XToolkit.run(XToolkit.java:550)
            at sun.awt.X11.XToolkit.run(XToolkit.java:525)
            at java.lang.Thread.run(Thread.java:675)
    "Java2D Disposer" daemon prio=10 tid=0x93854000 nid=0x1421 in Object.wait()
    [0x07aea000..0x07aead84]
       java.lang.Thread.State: WAITING (on object monitor)
            at java.lang.Object.wait(Native Method)
            - waiting on <0x966e7010> (a java.lang.ref.ReferenceQueue$Lock)
            at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
            - locked <0x966e7010> (a java.lang.ref.ReferenceQueue$Lock)
            at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:150)
            at sun.java2d.Disposer.run(Disposer.java:143)
            at java.lang.Thread.run(Thread.java:675)
    "Low Memory Detector" daemon prio=10 tid=0x93c15000 nid=0x141f runnable
    [0x00000000..0x00000000]
       java.lang.Thread.State: RUNNABLE
    "CompilerThread0" daemon prio=10 tid=0x93c13400 nid=0x141e waiting on condition
    [0x00000000..0x03a8a954]
       java.lang.Thread.State: RUNNABLE
    "Signal Dispatcher" daemon prio=10 tid=0x93c11c00 nid=0x141d waiting on
    condition [0x00000000..0x00000000]
       java.lang.Thread.State: RUNNABLE
    "Finalizer" daemon prio=10 tid=0x095e7000 nid=0x141c in Object.wait()
    [0x005d2000..0x005d3004]
       java.lang.Thread.State: WAITING (on object monitor)
            at java.lang.Object.wait(Native Method)
            - waiting on <0x966e71d8> (a java.lang.ref.ReferenceQueue$Lock)
            at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
            - locked <0x966e71d8> (a java.lang.ref.ReferenceQueue$Lock)
            at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:150)
            at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:177)
    "Reference Handler" daemon prio=10 tid=0x095e2400 nid=0x141b in Object.wait()
    [0x00581000..0x00582084]
       java.lang.Thread.State: WAITING (on object monitor)
            at java.lang.Object.wait(Native Method)
            - waiting on <0x966e7260> (a java.lang.ref.Reference$Lock)
            at java.lang.Object.wait(Object.java:503)
            at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:134)
            - locked <0x966e7260> (a java.lang.ref.Reference$Lock)
    "VM Thread" prio=10 tid=0x095dec00 nid=0x141a runnable
    "VM Periodic Task Thread" prio=10 tid=0x93c17400 nid=0x1420 waiting on condition
    JNI global references: 836
    Heap
    def new generation   total 960K, used 152K [0x93f40000, 0x94040000, 0x966a0000)
      eden space 896K,   9% used [0x93f40000, 0x93f56148, 0x94020000)
      from space 64K, 100% used [0x94020000, 0x94030000, 0x94030000)
      to   space 64K,   0% used [0x94030000, 0x94030000, 0x94040000)
    tenured generation   total 4096K, used 1088K [0x966a0000, 0x96aa0000, 0xb3f40000)
       the space 4096K,  26% used [0x966a0000, 0x967b01b0, 0x967b0200, 0x96aa0000)
    compacting perm gen  total 12288K, used 9169K [0xb3f40000, 0xb4b40000, 0xb7f40000)
       the space 12288K,  74% used [0xb3f40000, 0xb4834740, 0xb4834800, 0xb4b40000)
    No shared spaces configured.CLASS1:
    import java.awt.Dimension;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.sql.SQLException;
    import java.util.concurrent.ExecutionException;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.RepaintManager;
    import javax.swing.SwingUtilities;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    public class TestClass2 extends JFrame implements ActionListener {
            /** Action Command for <code>searchbtn</code> */
            public static final String SEARCH_BTN_ACTION = "search_btn_action";
             * Constructor.
            public TestClass2() {
                    setSize(650, 350);
                    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
                    setLocation(screenSize.width / 2 - getSize().width / 2,
                                    screenSize.height / 2 - getSize().height / 2);
                    setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
                    addWindowListener(new WindowAdapter() {
                            @Override
                            public void windowClosing(WindowEvent e) {
                                    exit();
                    JPanel panel = new JPanel();
                    add(panel);
                    setVisible(true);
            @Override
            public void actionPerformed(ActionEvent e) {
                    if (e.getActionCommand().equals(SEARCH_BTN_ACTION)) {
                            JOptionPane.showMessageDialog(this, "Button Pressed");
            public void showWait() {
                    try {
                            WaitDialog.showWaitDialog(this, "Testing...", new SwingWorkerInterface(){
                                    @Override
                                    public Object workToDo() throws Throwable {
                                            Thread.currentThread().sleep(3000);
                                            return null;
                    } catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                    } catch (ExecutionException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
             * Exits the program.
            public void exit(){
                    System.exit(0);
             * Create the GUI and show it. For thread safety, this method should be
             * invoked from the event-dispatching thread.
             * @throws UnsupportedLookAndFeelException
             * @throws IllegalAccessException
             * @throws InstantiationException
             * @throws ClassNotFoundException
             * @throws NullInstanceVariableException
             * @throws SQLException
            private static void createAndShowGUI() {
                    // set look and feel
                    try{
                            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                            // Create instance of the ProductCatalog
                            TestClass2 root = new TestClass2();
                            for(int i = 0; i < 10; i++){
                                    root.showWait();
                    }catch(Exception e){
                            e.printStackTrace();
             * @param args
             *            this program does not use arguments
            public static void main(String[] args) {
                    SwingUtilities.invokeLater(new Runnable() {
                            public void run() {
                                    createAndShowGUI();
    }CLASS 2:
    import java.awt.Component;
    import java.awt.Frame;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.util.concurrent.ExecutionException;
    import javax.swing.JDialog;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JProgressBar;
    import javax.swing.SwingWorker;
    public class WaitDialog extends JDialog {
            private boolean disposed = false;
            private boolean displayed = false;
            private WorkerThread worker = null;
            WaitDialog(Frame parent, String text, SwingWorkerInterface in){
                    super(parent, true);
                    worker = new WorkerThread(in);
                    setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
                    addWindowListener(new WindowAdapter() {
                            @Override
                            public void windowOpened(WindowEvent e) {
                                    worker.execute();
                            @Override
                            public void windowClosing(WindowEvent e) {
                                    disposeWaitDialog();
                    this.setResizable(false);
                    JLabel message = new JLabel();
                    message.setText(text);
                    JProgressBar pb = new JProgressBar();
                    pb.setIndeterminate(true);
                    // set size and location
                    setSize(200, 100);
                    setLocationRelativeTo(parent);
                    JPanel panel = new JPanel();
                    panel.add(message);
                    panel.add(pb);
                    add(panel);
            public void showWaitDialog(){
                    if(displayed == true){
                            return;
                    if(disposed == true){
                            disposed = false;
                            return;
                    disposed = false;
                    displayed = true;
                    setVisible(true);
            public void disposeWaitDialog(){
                    if(disposed == true){
                            return;
                    if(displayed == true){
                            displayed = false;
                            setVisible(false);
                            return;
                    disposed = true;
                    displayed = false;
            public static Object showWaitDialog(Component parent, String text, SwingWorkerInterface in) throws InterruptedException, ExecutionException {
                    WaitDialog waitDialog = null;
                    if (parent == null) {
                            waitDialog = new WaitDialog(JOptionPane.getRootFrame(), text, in);
                    } else {
                            waitDialog = new WaitDialog(JOptionPane.getFrameForComponent(parent), text, in);
                    while(!waitDialog.worker.isDone()){
                            System.out.println("about to show");
                            waitDialog.showWaitDialog();
                            System.out.println("done showing");
                    waitDialog.dispose();
                    return waitDialog.worker.get();
            class WorkerThread extends SwingWorker<Throwable, Void> {
                    private SwingWorkerInterface in = null;
                    WorkerThread(SwingWorkerInterface in){
                            this.in = in;
                    public Throwable doInBackground(){
                                    try {
                                            System.out.println("about to do work");
                                            in.workToDo();
                                            System.out.println("done work no exception");
                                    } catch (Throwable e) {
                                            System.out.println("done work with exception");
                                            return e;
                                    return null;
                    public void done(){
                                    System.out.println("about to dispose");
                                    disposeWaitDialog();
                                    System.out.println("disposed");
    }CLASS 3:
    public interface SwingWorkerInterface {
            public Object workToDo() throws Throwable;
    }

    There's nothing directly wrong with it, but it will
    prevent other threads acquiring the class lock - but
    that may be what you want.True. Although the typical case for code that looks like this would be to use wait--usually the various threads in question require the same lock, so you have to use wait in order for the waiting thread to give it up and allow the other thread to do its work. Hard to say for sure though what he's doing.
    Also, if loading is all that the other thread does, and you're waiting for that thread to die, use join. But then, if that's the case, and you're only waiting for a single other thread, then you might as well just put it all in one thread, as already indicated.

Maybe you are looking for