Question

In: Computer Science

Using the concepts from the Concurrency Basics Tutorial I provided in Modules, write a program that...

Using the concepts from the Concurrency Basics Tutorial I provided in Modules, write a program that consists of two threads. The first is the main thread that every Java application has. The main thread should create a new thread from the Runnable object, MessageLoop, and wait for it to finish. If the MessageLoop thread takes too long to finish, the main thread should interrupt it. Use a variable named maxWaitTime to store the maximum number of seconds to wait. The main thread should output a message stating that it is still waiting every half second. The MessageLoop thread should print out a series of 4 messages. These messages should be numbered, as in the example below. It should wait 850 milliseconds between printing messages to create a delay. If it is interrupted before it has printed all its messages, the MessageLoop thread should print "Message loop interrupted" and exit. Or you can let main print "Message loop interrupted". Your program must demonstrate that it can both output messages and interrupt the message output. To do this, place the body of main into a for loop using maxWaitTime as the index. As in the following example, it should finally output all 4 messages in the last iteration. So in main your code will be for (int maxWaitTime = 1; maxWaitTime <= 4; maxWaitTime++) { // All of main's processing goes here (Note that it does not say some, it says all). }

Sample output :

maxWaitTime: 1 second(s)
main : Starting MessageLoop thread
main : Waiting for MessageLoop thread to finish
main : Continuing to wait...
main : Continuing to wait...
Thread-0 : 1. All that is gold does not glitter, Not all those who wander are lost
main : MessageLoop interrupted
maxWaitTime: 2 second(s)
main : Starting MessageLoop thread
main : Waiting for MessageLoop thread to finish
main : Continuing to wait...
main : Continuing to wait...
Thread-1 : 1. All that is gold does not glitter, Not all those who wander are lost
main : Continuing to wait...
main : Continuing to wait...
Thread-1 : 2. The old that is strong does not wither, Deep roots are not reached by the frost
main : MessageLoop interrupted
maxWaitTime: 3 second(s)
main : Starting MessageLoop thread
main : Waiting for MessageLoop thread to finish
main : Continuing to wait...
main : Continuing to wait...
Thread-2 : 1. All that is gold does not glitter, Not all those who wander are lost
main : Continuing to wait...
main : Continuing to wait...
Thread-2 : 2. The old that is strong does not wither, Deep roots are not reached by the frost
main : Continuing to wait...
main : Continuing to wait...
Thread-2 : 3. From the ashes a fire shall be woken, A light from the shadows shall spring
main : MessageLoop interrupted
maxWaitTime: 4 second(s)
main : Starting MessageLoop thread
main : Waiting for MessageLoop thread to finish
main : Continuing to wait...
main : Continuing to wait...
Thread-3 : 1. All that is gold does not glitter, Not all those who wander are lost
main : Continuing to wait...
main : Continuing to wait...
Thread-3 : 2. The old that is strong does not wither, Deep roots are not reached by the frost
main : Continuing to wait...
main : Continuing to wait...
Thread-3 : 3. From the ashes a fire shall be woken, A light from the shadows shall spring
main : Continuing to wait...
Thread-3 : 4. Renewed shall be blade that was broken
main : Done!

Your class must be in a package named mypackage and be named Concurrency, as explained in last week's videos. It should be contained in 1 and only 1 source file. Must be in Java and result info as above.

Solutions

Expert Solution

Case: When thread interrupts:

Code -

package thread;

public class MessageLoop implements Runnable {

public void run() {

try {

for(int i=1;i<=5;i++){

Thread.sleep(2100);

System.out.println("Thread-0: Message "+(i));

}

}

catch (InterruptedException ex) {

System.out.println("Thread-0: Message loop interrupted");

}

}

public static void main(String[] args) {

System.out.println("main: Starting MessageLoop thread");

//create a thread

Thread t1 = new Thread(new MessageLoop());

//start the thread

t1.start();

System.out.println("main: Waiting for MessageLoop thread to finish");

//until thread alive

while(t1.isAlive()){

try {

//1 second delay and print message

System.out.println("main: Continuing to wait...");

System.out.println("main: Interrupting");

t1.interrupt();

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

System.out.println("main: Finished!");

}

}

Output of the code:

Case II -

package thread;

public class MessageLoop implements Runnable {

public void run() {

try {

for(int i=1;i<=5;i++){

Thread.sleep(2100);

System.out.println("Thread-0: Message "+(i));

}

}

catch (InterruptedException ex) {

System.out.println("Thread-0: Message loop interrupted");

}

}

public static void main(String[] args) {

System.out.println("main: Starting MessageLoop thread");

//create a thread

Thread t1 = new Thread(new MessageLoop());

//start the thread

t1.start();

System.out.println("main: Waiting for MessageLoop thread to finish");

//until thread alive

while(t1.isAlive()){

try {

//1 second delay and print message

System.out.println("main: Continuing to wait...");

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

System.out.println("main: Finished!");

}

}


Related Solutions

Using Eclipse to answer this Java question Using the concepts from the Concurrency Basics Tutorial I...
Using Eclipse to answer this Java question Using the concepts from the Concurrency Basics Tutorial I provided in Modules, write a program that consists of two threads. The first is the main thread that every Java application has. The main thread should create a new thread from the Runnable object, MessageLoop, and wait for it to finish. If the MessageLoop thread takes too long to finish, the main thread should interrupt it. Use a variable named maxWaitTime to store the...
Exercise 1: Study the tutorial from Unit 6 on Sorting Arrays and Vectors. Write a program...
Exercise 1: Study the tutorial from Unit 6 on Sorting Arrays and Vectors. Write a program that generates a sequence of 20 random values between 0 and 99 in an array, prints the sequence, sorts it, and prints the sorted sequence. Use the sort method from the C++ standard library. Do not add duplicate values to your array.   Hint: #include <algorithm> #include "math.h" using namespace std; const int SIZE = 100; while (numAdded < 100) { val = floor(rand() %...
C++ program using Eclipse IDE The C++ program should have concurrency. The C++ program should create...
C++ program using Eclipse IDE The C++ program should have concurrency. The C++ program should create 2 threads that will act as counters. One thread should count down from 5 to 0. Once that thread reaches 0, then a second thread should be used to count up to 20.
How do I create this program? Using C++ language! Write a program that reads data from...
How do I create this program? Using C++ language! Write a program that reads data from a text file. Include in this program functions that calculate the mean and the standard deviation. Make sure that the only global varibles are the mean, standard deviation, and the number of data entered. All other varibles must be local to the function. At the top of the program make sure you use functional prototypes instead of writing each function before the main function....ALL...
Explain the difference between concurrency and parallelism. Using these concepts, discuss how a multi-threaded application can...
Explain the difference between concurrency and parallelism. Using these concepts, discuss how a multi-threaded application can run faster than a single-threaded application on a single-processor machine and on a multi-processor machine.
using C program Assignment Write a computer program that converts a time provided in hours, minutes,...
using C program Assignment Write a computer program that converts a time provided in hours, minutes, and seconds to seconds Functional requirements Input MUST be specified in hours, minutes, and seconds MUST produce the same output as listed below in the sample run MUST correctly compute times Nonfunctional requirements MUST adhere to program template include below MUST compile without warnings and errors MUST follow the code template provided in this assignment MUST NOT change " int main() " function MUST...
using C program Assignment Write a computer program that converts a time provided in hours, minutes,...
using C program Assignment Write a computer program that converts a time provided in hours, minutes, and seconds to seconds Functional requirements Input MUST be specified in hours, minutes, and seconds MUST produce the same output as listed below in the sample run MUST correctly compute times Nonfunctional requirements MUST adhere to program template include below MUST compile without warnings and errors MUST follow the code template provided in this assignment MUST NOT change " int main() " function MUST...
Operating Systems Concepts What difficulties arise from concurrency? What are the requirements necessary to support mutual...
Operating Systems Concepts What difficulties arise from concurrency? What are the requirements necessary to support mutual exclusion? Does interrupt disabling work on multiprocessors? Why?
Using the provided code (found here), write a program using the main method where the user...
Using the provided code (found here), write a program using the main method where the user enters Strings and the program echoes these strings to the console until the user enters “quit”. When user quits the program should print out, “Goodbye”. You may assume that the case is ignored when the user enters, “quit”, so “quit”, “QUIT”, “Quit”,“qUiT”, etc. are all acceptable ways to end the program. The results should be printed out to the console in the following format:...
Using the provided network diagram, write a program in c ++ that finds the shortest path...
Using the provided network diagram, write a program in c ++ that finds the shortest path routing using the Bellman-Ford algorithm. Your program should represent the fact that your node is U. Show how the iterative process generates the routing table for your node. One of the keys to your program will be in determining when the iterative process is done. Deliverables 1. Provide an output that shows the routing table for your node after each iteration. Add a second...
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT