Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Two threads; Print 1 – 10; 1 thread prints odd; 1 thread prints even Hi I need t

ID: 3706919 • Letter: T

Question

Two threads; Print 1 – 10; 1 thread prints odd; 1 thread prints even Hi I need to do this assignment this my starter codes but I need to print two threads with above mentioned instructions if some one can help me out. public class TaskThreadDemo3 { public static void main(String[] args) { // Create tasks Runnable printA = new PrintChar('a', 100); Runnable printB = new PrintChar('b', 100); Runnable print100 = new PrintNum(100); // Create threads Thread thread1 = new Thread(printA); Thread thread2 = new Thread(printB); Thread thread3 = new Thread(print100); // Start threads thread1.start(); thread2.start(); thread3.start(); } } // The task for printing a specified character in specified times class PrintChar implements Runnable { private char charToPrint; // The character to print private int times; // The times to repeat /** Construct a task with specified character and number of * times to print the character */ public PrintChar(char c, int t) { charToPrint = c; times = t; } /** Override the run() method to tell the system * what the task to perform */ public void run() { for (int i = 0; i < times; i++) { System.out.print(charToPrint); } } } // The task class for printing number from 1 to n for a given n class PrintNum implements Runnable { private int lastNum; /** Construct a task for printing 1, 2, ... i */ public PrintNum(int n) { lastNum = n; } /** Tell the thread how to run */ public void run() { for (int i = 1; i <= lastNum; i++) { System.out.print(" " + i); } } }

Explanation / Answer

public class EvenOdd {

    public static void main(String... args) {

        Printer print = new Printer();

        Thread t1 = new Thread(new TaskEvenOdd(print, 10, false));

        Thread t2 = new Thread(new TaskEvenOdd(print, 10, true));

        t1.start();

        t2.start();

    }

}

class TaskEvenOdd implements Runnable {

    private int max;

    private Printer print;

    private boolean isEvenNumber;

    TaskEvenOdd(Printer print, int max, boolean isEvenNumber) {

        this.print = print;

        this.max = max;

        this.isEvenNumber = isEvenNumber;

    }

    @Override

    public void run() {

        //System.out.println("Run method");

        int number = isEvenNumber == true ? 2 : 1;

        while (number <= max) {

            if (isEvenNumber) {

                //System.out.println("Even :"+ Thread.currentThread().getName());

                print.printEven(number);

                //number+=2;

            } else {

                //System.out.println("Odd :"+ Thread.currentThread().getName());

                print.printOdd(number);

                // number+=2;

            }

            number += 2;

        }

    }

}

class Printer {

    boolean isOdd = false;

    synchronized void printEven(int number) {

        while (isOdd == false) {

            try {

                wait();

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

        }

        System.out.println("Even:" + number);

        isOdd = false;

        notifyAll();

    }

    synchronized void printOdd(int number) {

        while (isOdd == true) {

            try {

                wait();

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

        }

        System.out.println("Odd:" + number);

        isOdd = true;

        notifyAll();

    }

}

Output:

Odd:1

Even:2

Odd:3

Even:4

Odd:5

Even:6

Odd:7

Even:8

Odd:9

Even:10