Search code examples
javamultithreadinginterfacesleeprunnable

Class implements Runnable but start() and sleep() methods are not defined


I've created a class called Thread that implements Runnable but I cannot invoke the start() or sleep() methods for some reason. Any time I attempt to do so, I get errors saying that these methods are undefined for the class and suggests that I create them. So I created a new project and copied a sample code to see if there was something wrong with my own code and I received the same errors. Here's the sample code:

class Thread implements Runnable {
    private int a;
    public Thread (int a) {
        this.a = a;
    }
    public void run() {
        for (int i = 1; i <= a; ++i) {
            System.out.println(Thread.currentThread().getName() + " is " + i);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {}
        }
    }
}

and this is my own code:

public class Thread extends PID implements Runnable {
    public Thread() {};                      // Empty constructor for thread object
    public void run() {
        Random gen = new Random();           // Generates random values
        int sleepTime;                       // Sleep time
        sleepTime = gen.nextInt(60 - 1) + 1; // Generates random sleep time between 1 and 60 seconds
        try {
            Thread.sleep();
        } catch (Exception e) {
            System.out.println(e);
        } 
        System.out.println("The thread has been terminated");
    }
}

Solution

  • To fix your current error, simply rename your Thread class to MyThread (or whatever), because your Thread class is hiding the java.lang.Thread class.

    If you want to stick to Thread, you'll have to use the fully qualified name for java.lang.Thread like this:

    try{
        java.lang.Thread.sleep(1000);
        // ...