Another question about threads

Hi guys,
I'm looking for a method to pause a thread for some time. I tried sleep(), but sleep() executes the run method after "sleeping".
I just want a method to stop execution and resume at the same line of code. Is there a way I can do this?

You have to call the wait on the object you are waiting on not the wait for the current thread.
To get the monitor you have to synchronize on the queue
eg
run()
synchronized(myQueue)
if(myQueue.isEmpty())
myQueue.wait();
....// process queue
}// run()
in the myQueue src code you need a method such as
public void synchronized add(Object o)
notifyAll(); // wakes up threads
}

Similar Messages

  • Another question about Thread! 'theJava' are prohibited!

    hi,guys!
    the code seems grown:)
    but it is still confused:~
    public class Test extends Thread{
         private boolean direct;
         Item item=null;
         public static void main(String argv[]){
              Item item=new Item(0);
              Test thread1=new Test(true,item);
              Test thread2=new Test(false,item);
              thread1.start();
              thread2.start();
         Test(boolean direct,Item item){
              this.direct=direct;
              this.item=item;
         public void run(){
              synchronized(item.part){
              /*synchronized(item){ here it works properly, for the item
              locked prevent any other thread's modification
              but why does 'item.part' take the same effect as above?
              what on earth does 'synchronized(x)' mean?
              does it lock the behaviors only on object x?
              could i lock member object of object x as above?
              for(int i=1;i<10;i++){
                   try{Thread.sleep(1000);}catch(InterruptedException ie){}
                   if(direct==true)
                        item.addValue();
                   else
                        item.reduceValue();
                   System.out.println((direct==true?"add value:":"reduce value:")+item.getValue());
    class Item{
         private int value;
         public Object part=new Object();
         Item(int i){
              value=i;
         public void addValue(){
              value++;
         public void reduceValue(){
              value--;
         public int getValue(){
              return value;
    thanks again.

    Here is the code in code tags, changed a little so I have Item as a static inner class (this has no effect on the running of the code either)..
    hi,guys!
    the code seems grown:)
    but it is still confused:~
    public class Test extends Thread {
        private boolean direct;
        Item item=null;
        public static void main(String argv[]) {
            Item item=new Item(0);
            Test thread1=new Test(true,item);
            Test thread2=new Test(false,item);
            thread1.start();
            thread2.start();
        Test(boolean direct, Item item) {
            this.direct=direct;
            this.item=new Item(0);
        public void run() {
            synchronized(item.part) {
                //* synchronized(item){ here it works properly, for the item
                //* locked prevent any other thread's modification
                //* but why does 'item.part' take the same effect as above?
                //* what on earth does 'synchronized(x)' mean?
                //* does it lock the behaviors only on object x?
                //*   could i lock member object of object x as above?
                for(int i=1;i<10;i++) {
                    try{
                        Thread.sleep(1000);
                    } catch(InterruptedException ie) { }
                    if(direct==true)
                        item.addValue();
                    else
                        item.reduceValue();
                    System.out.println((direct==true?"add value:":"reduce value:")+item.getValue());
        static class Item {
            private int value;
            public Object part=new Object();
            Item(int i) {
                value=i;
            public void addValue() {
                value++;
            public void reduceValue(){
                value--;
            public int getValue(){
                return value;
    }thanks again.
    Ok, the synchronized keyword takes an object as its parameter. This object is used by the objects monitor to make sure that no more than 1 thread may access it at a time for the duration of the synchronized block. Ok so far?
    The synchronized(item.part) works exactly the same way as synchronized(item) because part is a member of the item class. The monitor is just locking different objects, part happens to belong to item hence the effect of the lock is apparently the same.
    Variation 1. If the value for direct is true, sychronize on item. If false synchronize on item.part.
    Here is the code for you...
            synchronized((direct == true ? item : item.part)) {Run that and see what happens.
    Variant 2
    If you create 2 Item objects, assign the first one as you did before but the second 1 to the second Test instance then you will see that both threads now run side by side.
    Here is the code for that as well. Make sure that the synchronized code is the same as the original.
            Item item=new Item(0);
            Item item1 = new Item(0);
            Test thread1=new Test(true,item);
            Test thread2=new Test(false,item1);Hope this helps

  • ANOTHER Question about my iMac G3. Mac OS X and RAM

    Hey, I have ANOTHER question about my iMac G3.
    I know that I'm supposed to have the latest firmware updates for my iMac G3 running OS 8.1, which I do, but I read some where these firmware updates could only be updated if you're running OS 9.2. Yet when I run the firmware updater, it says my firmware is up to date. I just wanted to make sure this was correct because I just ordered an OS X 10.2 CD today, and I don't want my mac to be "dead" when I install it.
    My next question is how much RAM can my mac hold. It's an iMac G3 with a 233 mhz processor, if that makes a differemce.
    Again, thanks to the people who have helped me with my first Mac.

    hi there--
    unfortunately you require system 9.1 or 9.2 for the required firmware update 1.2 for your computer http://docs.info.apple.com/article.html?artnum=86117. so you'll have to install that if you want to install 10.2. it may work for you for a little while, but then you could possibly lose all your information. so i wouldn't advise attempting installing 10.2 without the correct firmware. [ : ) ]

  • Yet another question about super raid - GS70

    Yes, another question about Super Raid...I recently picked up the cheapest model of the GS70 on newegg which comes with 1 mSata SSD...just a mediocre one if I remember reading correctly.  I'm interested in using MSI's Super Raid once my warranty is over with and have been reading a couple posts here:
    1. Walk through of how to reinstall OS
    --> https://forum-en.msi.com/index.php?topic=167198.msg1224063#msg1224063
    2. I'll need a Super Raid card with links to get some, for about $100 each
    --> https://forum-en.msi.com/index.php?topic=171722.msg1252847#msg1252847
    3. I can't get Super Raid unless it originally came with it?
    --> https://forum-en.msi.com/index.php?topic=171185.msg1249640#msg1249640
    So what's the bottom line? Would I still be able to enable super raid in the future or am I SOL since it didn't come with it originally?
    thanks!

    The GT70 CAN come with an adapter that has 2 (on the older, GT70 0NX models) or 3 (on newer GT70 20X models) sockets for mSATA drives. It's an optional part, that takes place of the primary SATA drive in the notebook, and physically has a different part that connects to the motherboard. If it doesn't come with the SuperRaid adapter, then it just has support for a single 2.5" SATA drive.
    The GS70 on the otherhand, has this built into the motherboard and there is no swapping it out for a normal 2.5" SATA drive. You can only use mSATA drives (on those ports). The GS70 is meant to be an ultrabook, and therefore does not have the same ability as the GT70 to house up to 2 full size 2.5" SATA drives.
    That's really the main difference here. Without physically seeing a GT70 to see how the SuperRaid adapter works, it's slightly difficult to explain.
    But in the end, I wouldn't worry about the SuperRaid....The GS70 should have support for Intel Raid Management Engine, in which case that's all you really need.

  • Another question about gmail

    I just posted a question about adding gmail and it was answered.  Now, I have another question,  I added the new gmail account.  It shows in the mail preferences under accounts.  Incoming mail addressed to gmail comes to the Archive Box. But I still can't send mail by gmail because in the drop down menu on the email it only lists my other two accounts.  Gmail is not an option.  I highlighted gmail in the account list and it showed that as the account in use.  But, still there was no gmail option on the email form in the sender box.  How do I fix that?

    You need to look at and read over these very carefully.
    http://support.apple.com/kb/TS3276
    The link above is about sending issues.  The one below is about setting up or confiquring new e-mail.
    http://support.apple.com/kb/HT1277
    Good Luck to you and welcome to the Discussions.
    Don

  • Dumb question about Thread Safety in Servlets

    Hi all
    I wrote this Client API for sending requests and receiving responses to / from a multivalue database. The API is called by my Servlet. Now it seems my API is not thread safe because when several people open up the servlet at the same time, the API gets totally confused. When the API calls are inside a synchronized(){} it works just fine, but obviously at a big performance hit. Is that the wrong way of doing it??
    However when I was doing the ACID test locally on my machine, by opening two command prompts and excuting the same java program (with the same code in it as the servlet, but standalone) my API worked just fine. How come?
    Any insights appreciated as I am just learning about thread safety now (the hard way :-( )
    cheers
    Dejan

    Does this help
    Are you using one connection to the database shared by all instances
    of your servlet
    And is this connection create in the init method of the servlet and stored
    in the servlet context.
    Problem 4 people try and use your servlet at the same time, each servlet trys to
    create a connection to the database and then store it in the servlet context and
    this causes a problem.
    Solution create a listener to create the connection and store it in the servlet context
    when the servlet is created.
    If this is your problem it is not advisable to use only one connection to the db
    try using db pooling

  • Another question about adding music to iPhone

    Apologies for yet another question regarding adding music to an iPhone but I am completely stuck.
    I bought a new laptop in January (it runs windows 8). I've authorised it and synced my phone to it before. I've used it to add music before.
    Lately I've just been buying music directly from itunes on my phone but I wanted to add some music from my older collection that is on an external harddrive.
    I've gone through the process of syncing the phone again, which has wiped whatever was on there. I made sure I'd ticked on the "manually manage music" box. 
    It's put all my purchased music back but it still will not let me drag and drop music from my external harddrive. When I hover over with the file it has "link" but it won't actually send the music to the phone.
    Is there a way for me to do this without putting music on to my itunes library? I don't like itunes and I definitely don't want to add the music to my laptop as it defeats the purpose of having an external harddrive! Sorry for such a long-winded explanation.

    Just to add... I've now tried adding music to the library (getting desperate here) and it's not letting me do that either. Just says 'link'.
    This is the most frustrating thing ever. Why are the simplest of tasks made so difficult? It seems like it only works if you buy the music from the iTunes store.

  • Yet another question about burners for iDVD 6

    It's not my intention to be redundant and the question about which DVD burners are compatible with the most recent release of iDVD has been asked a few times since iLife '06 was released at MacWorld last week. Yet, though Apple has announced it, why have they not posted a list of compatible devices?
    Or, is the onus on the manufacturers to certify that their burners are compatible with iDVD 6?
    In either case, has anyone determined if this information is available and, if so, where?
    Thanks.

    Or, is the onus on the manufacturers to certify that their burners are compatible with iDVD 6?
    Check with the support sections of the manufacturer's websites - after all, THEY are the ones trying to sell burners.

  • A question about thread safety and the Acrobat SDK

    Hi All,
    On page 12 of this FAQ: http://www.adobe.com/devnet/acrobat/pdfs/Acrobat_SDK_developer_faq.pdf
    It says that Use of any Acrobat product in a multithreaded way is technically impossible.
    I'm currently writing a command line application to perform some basic data gathering on a PDF file. The Application only makes use of a PDDoc object, and never calls on any other kind of object (i.e. AVDoc).
    The application itself is not multithreaded. All of the logic runs in a single thread.
    However, the application will be called (via the command line) from another application that /is/ multithreaded. I think that this might be fine, but I wasn't sure. In this case, would this count as a single thread, but spread across multiple processes? And if that is the case, would that be OK with the SDK?
    Or would having multiple invocations/calls into the Acrobat DLLs cause the same issue as a multi-threaded application?
    Unfortunately, I haven't done a lot of work with threads before. This might be a very silly question.

    The application would be called from a perl script that is used to automate several tasks. The app is a console application, written in C# w/ the Acrobat COM components, and Visual Studio 2005.
    The console application uses the Acrobat SDK to instantiate a PDDoc object, open a PDF, and get information about the document. It then returns results back to the console.
    So, the perl script just calls: "C:\pdfinfo.exe -f=myPdf.pdf" and pipes the result to a log file.
    In this case, it never creates a new instance of the Acrobat application, but it does use the SDK.
    The reason that I was concerned was that the perl script is multi-threaded. I wasn't sure if acrobat was just sensitive to multiple threads inside a single process, or if it was unable to handle multiple processes as well.
    PDL's answer suggests that I should be fine as long as a new process is started each time. This is good to hear.

  • Questions about thread priority...

    Situation 1) setPriority(int adsa)
    public class ThreadPrioDemo1 {
          static class Demo1 implements Runnable{
          public void run(){ //blablabla}
         public static void main(String[] asdf){
              Runnable r = new Demo1();
              Thread myThread = new Thread(r);
              Thread mainT = Thread.currentThread();
              //mainT's priority is 5, so as myThread.
            mainT.setPriority(10);
    //mainT's priority to MAX, this simultaneously changes myThread to 10 as well.
            //or
            myThread.setPriority(10);
    //myThread priority to MAX, however, this does not change mainT to 10
    }Question 1), why if main Thread is set to a certain priority, the thread it creates automatically change its priority to the same as well, but the reverse is different??
    Situation 2) this is slightly more complex
    public class ImplementingRunnable {
         public static void main(String[] args) {
         Thread mainT = Thread.currentThread();
              for(int ii=0 ; ii<args.length ; ii++) {
                   Runnable r = new MyRunnable(args[ii]);
                   Thread t = new Thread(r);
                t.setDaemon(true);
                //t.setPriority(Thread.MAX_PRIORITY);
                   t.start();
    }and
    public class MyRunnable implements Runnable {
        public void test(){
        System.out.println("test");
         String message;
         public MyRunnable(String msg) {
              message = msg;
         public void run() {
              Thread me = Thread.currentThread();
              try {
                   for(int ii=0 ; ii<10 ; ii++) {
                       //case (1) me.setPriority(Thread.MIN_PRIORITY);
                        me.sleep(3);
                        System.out.println(message);
                        //case (2) me.setPriority(Thread.MIN_PRIORITY);
              } catch (InterruptedException ie) {
    }In class ImplementingRunnable, how is the commented code line related or counter-related with the commented case 1 code line in MyRunnable??
    Please help
    thanks

    Let me speak my question again very simply:
    1)
    Say I have two threads, 1 is main() thread, the program entry point, 2 is another thread created by main().
    Now, the default priority for both two is 5. If I change the priority for main() to a certain level, the other thread created by it automatically change its priority to the same level? why? and however, the reverse (in this case, if I change the priority for the thread created by main()) is not.
    2)
    public class Demo{
    static class MyThread implements Runnable{
    public void run(){//some thing}
    Thread t = new Thread(this);
    t.setPriority(10);
    public static void main(String[] afd){
    Runnable r = new MyThread();
    Thread t1 = new Thread(r);
    t1.setPriority(1);
    }What can you say about both bold code lines?
    If I use println() to track the Priority, the final priority, that is, t1, is 1. It is logical, however, the program behaves differently without the bold code line in the static class MyThread, despite the final priority for t1, is the same, 1.
    Any help by now??
    thanks alot

  • Another question about upgrading RAM on G4 iMac

    I know that there are numerous threads on this forum about upgrading RAM and I am sorry to have to open another one but, having read many of them, I am still confused!
    I have unopened copies of Leopard and ILife 08 that I am planning to install on my 17-inch 1GHz G4 iMac with 768 MB of RAM (256 MB in the factory slot and 512 MB in the user accessible slot). I know that this model does not support all the functions of these programs but I am currently running Panther and the very first iLife so I think it's time for an upgrade!
    Apple states that this model supports up to 1GB RAM so I have been thinking that in order to get the best out of the new software I should upgrade to 1GB RAM. My questions are:
    1. Do I need to upgrade or is the existing RAM of 768 MB likely to be sufficient?
    2. If I upgrade, how easy is it to add RAM to the factory slot? I have searched but can find no instructions on this here or on the Apple website which implies that this is not recommended.
    3. Several threads on this forum seem to suggest that, in order to avoid having to mess with the factory slot, it is possible to put 1GB RAM in the user accessible slot and leave the factory slot well alone, resulting in total RAM greater than the maximum recommended by Apple. Is this correct or have I misunderstood?
    Thanks in advance.

    1. Do I need to upgrade or is the existing RAM of 768 MB likely to be sufficient?
    That will probably be sufficient. You could always install and run both Leopard and iLife '08 and see if you feel that they are working OK before buying any RAM.
    2. If I upgrade, how easy is it to add RAM to the factory slot? I have searched but can find no instructions on this here or on the Apple website which implies that this is not recommended.
    Apple does not post the directions because this is not considered something that a user can do by themselves.
    You can see the process at www.xlr8yourmac.com/systems/iMacg4/imacg4takeapart.html
    3. Several threads on this forum seem to suggest that, in order to avoid having to mess with the factory slot, it is possible to put 1GB RAM in the user accessible slot and leave the factory slot well alone, resulting in total RAM greater than the maximum recommended by Apple. Is this correct or have I misunderstood?
    That is correct. You could replace the 512 MB in the user accessible slot with 1 GB to provide a total RAM of 1.256 GB.

  • I'm a newbie: I have a question about threads

    midp 2.0
    Java SE 5.0
    J2ME version 2.2
    Below is my code I'm stucked with..... The code here shows a midlet class
    and another class derived from Thread (NetworkThread). This NetworkThread
    gets started from the main midlet... Search my code for the term ??????? and
    there you find my trouble area... What I'm having trouble with is that at
    that point in my code a NetworkThread has been given a url to access, and
    putting network access in the main thread is a bad thing because one can
    never know how long it takes to access the server... I want this line:
    System.out.println("NETWORK COMMINUCATION DONE"); to be processed after
    NetworkThread is done requesting the url.... I'm not sure how to solve this
    code so that the midlet waits for NetworkThread to access the url... But
    while NetworkThread access the url I want the midlet to response to user
    input, I don't want it to look like the midlet has crashed......
    Any tips on how I can solve this issue will be greatly appreciated...
    By the way, if you see anything else that could have been improved in my
    code, then please tell me about it too....
    MY CODE:
    NETWORKTHREAD:
    package com.test;
    import java.io.IOException;
    import java.io.*;
    import java.util.*;
    import javax.microedition.io.*;
    public class NetworkThread extends Thread
    private boolean networkStop;
    private boolean networkPause;
    private HttpConnection httpConnection = null;
    private InputStream inputStream;
    private String Url;
    private String netCommand = null;
    private String netArg = null;
    private LoginForm loginForm;
    public NetworkThread(String serverURL)
      Url = serverURL;
    synchronized void requestStop()
      networkStop = true;
      notify();
    synchronized void resumeGame()
      networkPause = false;
      notify();
    synchronized void setCommand(String cmd, String arg)
      System.out.println("setCommand = " + cmd);
      netCommand = cmd;
      netArg = arg;
      networkPause = false;
      notify();
    void pauseThread()
      networkPause = true;
    public void run()
      networkPause = true;
      networkStop = false;
      while (true)
       if (networkStop) {
        break;
       synchronized(this) {
        while (networkPause) {
         try {
          wait();
         catch (Exception e) {}
       synchronized(this) {
         if (netCommand != null) {
           if (netCommand.equals("LOGIN")) {
             //Here some networking processing will
             //be done
         else if (netCommand.equals("LOGOUT")) {
         netCommand = null;
       pauseThread();
    THE MIDLET:
    package com.test;
    import javax.microedition.midlet.*;
    import javax.microedition.lcdui.*;
    import javax.microedition.io.*;
    import java.io.IOException;
    import java.lang.String;
    public class Test extends MIDlet
      private Display display;
      private NetworkThread networkThread;
      private String Url;
      public Test() {
        display = Display.getDisplay(this);
      public void startApp() throws MIDletStateChangeException {
        if (networkThread == null) {
          networkThread = new NetworkThread(Url);
          networkThread.start();
      else {
         networkThread.start();
    public void destroyApp(boolean unconditional) throws
    MIDletStateChangeException {
       public void pauseApp() {
       public void commandAction(Command c, Displayable s) {
         if (c == okCommand) {
           networkThread.setCommand("LOGIN", "arg1");
           System.out.println("NETWORK COMMINUCATION DONE");
    }

    You will probably need to learn about HTTP and XML to complete this project. If you don't know Java at all then I would suggest starting with tutorials like these ones first
    http://java.sun.com/docs/books/tutorial/index.html
    Have a happy day.

  • Urgent question about Thread-safety

    Hi all,
    the new tiger release provides an "isReachable()" method for the "InetAddress" object.
    I've found, this method is not thread-safe (see the source and output below).
    It returns true for all threads, when multiple threads using this method with different adresses are running at a time and one of the addresses is reachable. This happens only on WinXp. Running on Linux, the output is like expected.
    I've tried to report this as a bug. But the gurus answered, taking care of thread safety would be a "programmers task".
    My question is, what can I do, to be thread-safe in my case?
    W.U.
    import java.util.*;
    import java.net.*;
    public class IsReachableTest_1 extends Thread{
        static volatile int inst=1;
        static final String NET_ADDR="192.168.111.";
        int instance=inst++;
        public void run(){
            for(int i=19;i<23;i++){
                try{
                    long start=System.nanoTime();
                    if(InetAddress.getByName(NET_ADDR+i).isReachable(1000))
                        System.out.println(""+instance+"--host found at:"+NET_ADDR+i+"--time:"+(System.nanoTime()-start)/1000000);
                    else
                        System.out.println(""+instance+"--no host at:"+NET_ADDR+i);
                }catch(Exception e){System.out.println(""+instance+"--ERROR "+e.toString());}
            System.out.println(""+instance+"--done.");
        public static void main(String[] args) {
            System.out.println(
                System.getProperty("java.vendor")+" "+
                System.getProperty("java.version")+" running on "+
                System.getProperty("os.name")+" "+
                System.getProperty("os.version"));
            Vector v=new Vector();
            System.out.println("\nTest 1: One after another:");
            for(int i=0;i<10;i++){
                IsReachableTest_1 t;
                t=new IsReachableTest_1();
                t.start();
                try{
                    t.join();
                }catch(Exception e){System.out.println("MAIN1: "+e.toString());}
            System.out.println("\nTest 2: All together:");
            inst=1;
            for(int i=0;i<10;i++){
                IsReachableTest_1 t;
                t=new IsReachableTest_1();
                t.start();
                v.addElement(t);
            for(Iterator i=v.iterator();i.hasNext();)
                try{
                    ((IsReachableTest_1)i.next()).join();
                }catch(Exception e){System.out.println("MAIN2: "+e.toString());}
                System.out.println("\nALL DONE");
    And here is the output, when running on WinXp:
    Sun Microsystems Inc. 1.5.0-beta running on Windows XP 5.1
    Test 1: One after another:
    1--no host at:192.168.111.19
    1--no host at:192.168.111.20
    1--host found at:192.168.111.21--time:2
    1--no host at:192.168.111.22
    1--done.
    2--no host at:192.168.111.19
    2--no host at:192.168.111.20
    2--host found at:192.168.111.21--time:4
    2--no host at:192.168.111.22
    2--done.
    3--no host at:192.168.111.19
    3--no host at:192.168.111.20
    3--host found at:192.168.111.21--time:1
    3--no host at:192.168.111.22
    3--done.
    4--no host at:192.168.111.19
    4--no host at:192.168.111.20
    4--host found at:192.168.111.21--time:1
    4--no host at:192.168.111.22
    4--done.
    5--no host at:192.168.111.19
    5--no host at:192.168.111.20
    5--host found at:192.168.111.21--time:3
    5--no host at:192.168.111.22
    5--done.
    6--no host at:192.168.111.19
    6--no host at:192.168.111.20
    6--host found at:192.168.111.21--time:1
    6--no host at:192.168.111.22
    6--done.
    7--no host at:192.168.111.19
    7--no host at:192.168.111.20
    7--host found at:192.168.111.21--time:1
    7--no host at:192.168.111.22
    7--done.
    8--no host at:192.168.111.19
    8--no host at:192.168.111.20
    8--host found at:192.168.111.21--time:1
    8--no host at:192.168.111.22
    8--done.
    9--no host at:192.168.111.19
    9--no host at:192.168.111.20
    9--host found at:192.168.111.21--time:1
    9--no host at:192.168.111.22
    9--done.
    10--no host at:192.168.111.19
    10--no host at:192.168.111.20
    10--host found at:192.168.111.21--time:1
    10--no host at:192.168.111.22
    10--done.
    Test 2: All together:
    1--no host at:192.168.111.19
    2--no host at:192.168.111.19
    3--no host at:192.168.111.19
    4--no host at:192.168.111.19
    5--no host at:192.168.111.19
    6--no host at:192.168.111.19
    7--no host at:192.168.111.19
    8--no host at:192.168.111.19
    9--no host at:192.168.111.19
    10--no host at:192.168.111.19
    2--no host at:192.168.111.20
    3--no host at:192.168.111.20
    6--host found at:192.168.111.20--time:924 <----- this host does not exist!!
    5--host found at:192.168.111.20--time:961 <----- this host does not exist!!
    10--host found at:192.168.111.20--time:778 <----- this host does not exist!!
    9--host found at:192.168.111.20--time:815 <----- this host does not exist!!
    2--host found at:192.168.111.21--time:37
    7--host found at:192.168.111.20--time:888 <----- this host does not exist!!
    8--host found at:192.168.111.20--time:852 <----- this host does not exist!!
    4--host found at:192.168.111.20--time:997 <----- this host does not exist!!
    1--host found at:192.168.111.20--time:1107 <----- this host does not exist!!
    3--host found at:192.168.111.21--time:38
    6--host found at:192.168.111.21--time:1
    5--host found at:192.168.111.21--time:1
    10--host found at:192.168.111.21--time:2
    2--host found at:192.168.111.22--time:3 <----- this host does not exist!!
    9--host found at:192.168.111.21--time:2
    7--host found at:192.168.111.21--time:1
    4--host found at:192.168.111.21--time:3
    1--host found at:192.168.111.21--time:39
    2--done.
    1--host found at:192.168.111.22--time:5 <----- this host does not exist!!
    1--done.
    10--host found at:192.168.111.22--time:40 <----- this host does not exist!!
    3--host found at:192.168.111.22--time:192 <----- this host does not exist!!
    6--host found at:192.168.111.22--time:75 <----- this host does not exist!!
    8--host found at:192.168.111.21--time:230
    5--host found at:192.168.111.22--time:155 <----- this host does not exist!!
    4--host found at:192.168.111.22--time:78 <----- this host does not exist!!
    9--host found at:192.168.111.22--time:77 <----- this host does not exist!!
    7--host found at:192.168.111.22--time:76 <----- this host does not exist!!
    10--done.
    6--done.
    4--done.
    5--done.
    3--done.
    7--done.
    9--done.
    8--no host at:192.168.111.22
    8--done.
    ALL DONE

    I created this test (it's basically the same as your class):
    import java.util.*;
    import java.net.*;
    public class IsReachableTest_2 implements Runnable {
        private final String[] addresses = new String[] {
             "www.sun.com",
             "129.42.16.99" // www.ibm.com which is not reachable
        public void run(){
            try {
                for (int i = 0; i < addresses.length; i++) {
                    final long start = System.nanoTime();
                    final String address = addresses;
         if (InetAddress.getByName(address).isReachable(5000)) {
         System.out.println(Thread.currentThread().getName() + ": Host found at: " + address +
              " --time: " + (System.nanoTime() - start) / 1000);
         } else System.out.println("no host at: " + address);
    } catch(Exception e){
    e.printStackTrace();
    System.out.println("Thread " + Thread.currentThread().getName() + " DONE");
    public static void main(String[] args) {
    System.out.println(
         System.getProperty("java.vendor") +
         " " +
         System.getProperty("java.version") +
         " running on " +
         System.getProperty("os.name") +
         " " +
         System.getProperty("os.version")
    for (int i = 0; i < 10; i++) {
         final Thread t = new Thread(new IsReachableTest_2(), "THREAD " + (i+1));
         t.start();
    And I get:
    Sun Microsystems Inc. 1.5.0-beta running on Windows 2000 5.0
    THREAD 1: Host found at: www.sun.com --time: 217653
    THREAD 3: Host found at: www.sun.com --time: 214404
    THREAD 6: Host found at: www.sun.com --time: 214900
    THREAD 4: Host found at: www.sun.com --time: 215901
    THREAD 5: Host found at: www.sun.com --time: 216666
    THREAD 10: Host found at: www.sun.com --time: 216620
    THREAD 9: Host found at: www.sun.com --time: 217405
    THREAD 2: Host found at: www.sun.com --time: 220705
    THREAD 7: Host found at: www.sun.com --time: 220845
    THREAD 8: Host found at: www.sun.com --time: 221384
    no host at: 129.42.16.99
    Thread THREAD 4 DONE
    no host at: 129.42.16.99
    Thread THREAD 6 DONE
    no host at: 129.42.16.99
    no host at: 129.42.16.99
    no host at: 129.42.16.99
    no host at: 129.42.16.99
    no host at: 129.42.16.99
    no host at: 129.42.16.99
    no host at: 129.42.16.99
    no host at: 129.42.16.99
    Thread THREAD 5 DONE
    Thread THREAD 10 DONE
    Thread THREAD 9 DONE
    Thread THREAD 7 DONE
    Thread THREAD 3 DONE
    Thread THREAD 1 DONE
    Thread THREAD 2 DONE
    Thread THREAD 8 DONE
    HOWEVER: I was getting some strange results every so often. Results like:
    Sun Microsystems Inc. 1.5.0-beta running on Windows 2000 5.0
    THREAD 3: Host found at: www.sun.com --time: 261132
    THREAD 9: Host found at: www.sun.com --time: 264183
    THREAD 2: Host found at: www.sun.com --time: 266447
    THREAD 6: Host found at: www.sun.com --time: 266596
    THREAD 8: Host found at: www.sun.com --time: 267192
    THREAD 5: Host found at: www.sun.com --time: 268610
    THREAD 4: Host found at: www.sun.com --time: 269849
    THREAD 1: Host found at: www.sun.com --time: 280978
    THREAD 7: Host found at: www.sun.com --time: 272589
    THREAD 10: Host found at: www.sun.com --time: 273162
    THREAD 3: Host found at: 129.42.16.99 --time: 13657
    Thread THREAD 3 DONE
    THREAD 4: Host found at: 129.42.16.99 --time: 4123
    THREAD 2: Host found at: 129.42.16.99 --time: 9439
    THREAD 5: Host found at: 129.42.16.99 --time: 6681
    THREAD 8: Host found at: 129.42.16.99 --time: 7655
    THREAD 6: Host found at: 129.42.16.99 --time: 8627
    THREAD 9: Host found at: 129.42.16.99 --time: 10586
    Thread THREAD 4 DONE
    Thread THREAD 2 DONE
    Thread THREAD 5 DONE
    Thread THREAD 8 DONE
    Thread THREAD 6 DONE
    Thread THREAD 9 DONE
    no host at: 129.42.16.99
    Thread THREAD 7 DONE
    no host at: 129.42.16.99
    no host at: 129.42.16.99
    Thread THREAD 10 DONE
    Thread THREAD 1 DONE
    Usually the first run after I had compiled the class (!?) This isn't a thread safety problem.

  • A question about threads

    Hi to everybody,
    I'm learning Java and I would like to know what's the difference between extending the Thread class and implementing the Runnable interface.
    Why when I run two objects that are instances of a Runnable class they seem to
    run concurrently, while when I run two objects whose class extends Thread, the virtual machine first executes the first thread , and only when the first thread has died it executes the second (the two threads have the same priority).
    I would also apreciate some clarifying information about "time-slicing" and the use of the method Thread.yield();
    thanks

    Main factor what desides whether to extend Thread or
    Implement Runnable is do you want to extend another.Sorry to say this but: WRONG!
    The main factor in a decision like this should be your model, i.e. is the class you are modelling really a sub-class of Thread, or - more likely - is it a task that should be able to run (on a thread or otherwise)?
    If you are in fact implementing a new kind of Thread (i.e. YourClass is-a Thread), then you extend Thread, otherwise you should implement Runnable.
    Ex:- If your class need to Extend another class then
    you cant extend Thread so you have to use Runnable.This is true, of course, but it should be done for the right reasons.
    So: implement Runnable (unless you are implementing a new kind of Thread)

  • Yet another question about installing ilife 06 with limited drive space

    I received iLife 2006 as a gift for my birthday. I am a happy user of most the iLife 2005 programs (except iDVD, which is useless on my machine with only a Combo drive). I am interested in making use of iWeb and the other improved features of iLife 2006.
    My problem is that my 40 GB drive is nearly full, with about 2 GB free. Of this, my iTunes library uses about 15 GB, and the IPhoto library takes another 2 GB or so. I do have a 60 GB iPod with about 25 GB free.
    I have read about complications with restoring the iTunes Library from the hidden folder on the iPod. But I wonder if the library could be more easily backed up to the iPod, temporarily deleted from my main hard drive, then restored after installing iLife 2006 (I have read that somewhat less than the full 10 GB is needed after install is complete).
    Alternatively, will the iLife 2006 installer allow me to install to the iPod as an external drive, from which I can make adjustments as needed?

    You can tell your wife that if you don't get an external hard drive to store your iTunes and iPhoto Library you are a prime target to lose your images and tunes.
    Yes, using iWeb you get a new url. I used Contribute to do the fiveafertfive.com site for my daughter's band.
    iWeb can create very nice pages and you can see many of them by visiting this link on the iWeb forums. It's eight pages long and lots of sites to look at.
    http://discussions.apple.com/thread.jspa?messageID=1705138#1705138
    Unfortunatley, the ability to send albums directly to .mac is no more with iPhoto 6. You can only send them to iWeb to make your page. Then in iWeb you publish your page to your idisk in a different folder.
    check out this thread for more info
    http://discussions.apple.com/thread.jspa?messageID=1519726&#1519726

Maybe you are looking for

  • ITunes isn't moving the music to the right folder.

    I direct it to D:\Music and it creates and puts it in D:\Music\Music, if I put it in D:\ it will put the music in D:\. It won't do D:\Music. Anyone know the issue?

  • TS5376 how to get itunes to download if it cannot find itunes64.msi

    I am trying to download the latest version of itunes on my computer.  It will not do the upgrade. itunes support says try uninstalling itunes and everything that has to go with it and it will not let me delete it.  A message comes up saying the featu

  • Want to know what is hcm configuration workbench

    i want to know what is the use of hcm configuration workbench please provide some material or documents for ref. also how can hcm configuration workbench be helpful in copying the payroll setups from one business group to another.

  • A new "Read the rules of engagement" plague?

    Has someone else recognized the the new phenomenon of someone posting a trivial and/or meaningless question and several respondents finding it worthwile to post something like Welcome to SDN. Please read the Rules of Engagement....Your thread will be

  • Adding xml to scrolling text window

    The problem is, I used this tutorial to make my scroll window. It seems to coding method isn't the best way to do it, as it makes it a pain in the *** to update. The guy didn't even put it in as an actionscript text, I would have to open up the text