Unrelated Threads
Home ] Up ] [ Unrelated Threads ] Related But Unsynchronized Threads ]

 

 

Here's an example of a set of unrelated threads:

package threads;

public class LanguageBigots
{
    public static void main(String[] args)
    {
        new Thread( new COBOL() ).start();
        new Thread( new CPlusPlus() ).start();
        new Thread( new FORTRAN() ).start();
        new Thread( new Pascal() ).start();
        new Thread( new Java() ).start();
    }
}

abstract class ProgrammingLanguage implements Runnable
{
    public void run()
    {
        for (int i = 0; i < 5; i++)
        {
            opinion();
            Thread.currentThread().yield();
        }
    }
    
    abstract protected void opinion();
}

class COBOL extends ProgrammingLanguage
{
    protected final void opinion()
    {
        System.out.println("COBOL: WE HAVE THE MOST LINES OF CODE! (ALL IN UPPER CASE)");
    }
}

class CPlusPlus extends ProgrammingLanguage
{
    protected final void opinion()
    {
        System.out.println("C++: Bjarne Stroustrup rules!");
    }
}

class FORTRAN extends ProgrammingLanguage
{
    protected final void opinion()
    {
        System.out.println("FORTRAN: Can *you* CONTINUE from a DO loop?");
    }
}

class Pascal extends ProgrammingLanguage
{
    protected final void opinion()
    {
        System.out.println("Pascal: Niklaus Wirth could teach you a lot!");
    }
}

class Java extends ProgrammingLanguage
{
    protected final void opinion()
    {
        System.out.println("Java: Write once, run (er, test) everywhere!");
    }
}

Notice that the threads are unrelated, even though they have code that is shared.

One run of this program produced the following output:

COBOL: WE HAVE THE MOST LINES OF CODE! (ALL IN UPPER CASE)
COBOL: WE HAVE THE MOST LINES OF CODE! (ALL IN UPPER CASE)
C++: Bjarne Stroustrup rules!
COBOL: WE HAVE THE MOST LINES OF CODE! (ALL IN UPPER CASE)
C++: Bjarne Stroustrup rules!
COBOL: WE HAVE THE MOST LINES OF CODE! (ALL IN UPPER CASE)
C++: Bjarne Stroustrup rules!
COBOL: WE HAVE THE MOST LINES OF CODE! (ALL IN UPPER CASE)
C++: Bjarne Stroustrup rules!
C++: Bjarne Stroustrup rules!
FORTRAN: Can *you* CONTINUE from a DO loop?
FORTRAN: Can *you* CONTINUE from a DO loop?
FORTRAN: Can *you* CONTINUE from a DO loop?
FORTRAN: Can *you* CONTINUE from a DO loop?
FORTRAN: Can *you* CONTINUE from a DO loop?
Pascal: Niklaus Wirth could teach you a lot!
Java: Write once, run (er, test) everywhere!
Pascal: Niklaus Wirth could teach you a lot!
Java: Write once, run (er, test) everywhere!
Pascal: Niklaus Wirth could teach you a lot!
Java: Write once, run (er, test) everywhere!
Pascal: Niklaus Wirth could teach you a lot!
Java: Write once, run (er, test) everywhere!
Pascal: Niklaus Wirth could teach you a lot!
Java: Write once, run (er, test) everywhere!

The output would typically vary from run to run, because of the inherent non-deterministic behavior of multi-threaded programs.

 

The page was last updated February 19, 2008