384,995 views
26 votes
26 votes
Write a program that launches 1,000 threads. Each thread adds 1 to a variable sum that initially is 0. You need to pass sum by reference to each thread. In order to pass it by reference, define an Integer wrapper object to hold sum. Run the program with and without synchronization to see its effect. Submit the code of the program and your comments on the execution of the program.

User Malus Jan
by
3.2k points

1 Answer

22 votes
22 votes

Answer:

Following are the code to the given question:

import java.util.concurrent.*; //import package

public class Threads //defining a class Threads

{

private Integer s = new Integer(0);//defining Integer class object

public synchronized static void main(String[] args)//defining main method

{

Threads t = new Threads();//defining threads class object

System.out.println("What is sum ?" + t.s);//print value with message

}

Threads()//defining default constructor

{

ExecutorService exe = Executors.newFixedThreadPool(1000);//defining ExecutorService class object

System.out.println("With SYNCHRONIZATION........");//print message

for(int i = 1; i <= 1000; i++)//defining a for loop

{

exe.execute(new SumTask2());//calling execute method

System.out.println("At Thread " + i +" Sum= " + s + " , ");//print message with value

}

exe.shutdown();//calling shutdown method

while(!exe.isTerminated())//defining while loop that calls isTerminated method

{

}

}

class SumTask2 implements Runnable//calling SumTask2 that inherits Runnable class

{

public synchronized void run()//defining method run

{

int value = s.intValue() + 1;//defining variable value that calls intvalue which is increment by 1

s = new Integer(value);//use s to hold value

}

}

}

Output:

Please find the attached file.

Step-by-step explanation:

In this code, a Threads class is defined in which an integer class object and the main method is declared that creates the Threads class object and calls its values.

Outside the method, the default constructor is declared that creates the "ExecutorService" and prints its message, and use a for loop that calls execute method which prints its value with the message.

In the class, a while loop is declared that calls "isTerminated" method, and outside the class "SumTask2" that inherits Runnable class and defined the run method and define a variable "value" that calls "intvalue" method which is increment by 1 and define s variable that holds method value.

Write a program that launches 1,000 threads. Each thread adds 1 to a variable sum-example-1
User Jparthj
by
2.8k points