Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Please write in Java You are taking a statistics class, and your instructor has found a website claiming a weird conspiracy theory that M&M colors

Please write in Java

You are taking a statistics class, and your instructor has found a website claiming a weird conspiracy theory that M&M colors are rigged, and he has asked you to determine the frequency of M&M colors from data collected by an M&M color-determination robot.

Your task is to design and implement a set of classes that process a collection of Integer objects, corresponding to an M&M color. The integers are stored in a queue by a driver. In particular, the following code must compile error free and execute correctly on your implementation. You should use generic Queue class from Programming Assignment 1. Your queue must import no Java data structures.

public static void main(String[] args) { Queue collection = new Queue(); for (int index = 0; index < 10000; index++) { int mm = ((int) (Math.random() * 10000)) % 5; Integer integ = new Integer(mm); collection.enqueue(integ); } RequestProcessor processor = new RequestProcessor(collection); int numberOfThreads = 5; Thread[] threads = new Thread[numberOfThreads]; for (int index = 0; index < threads.length; index++) { threads[index] = new Thread(processor); threads[index].start(); } try { for (int index = 0; index < threads.length; index++) { threads[index].join(); } } catch(InterruptedException ie) { ie.printStackTrace(); } ThreadStatisticsSetup.print(); }

One possible output is:

Tabulator: 1 Count 1137 for color Red=20.695303967965053% Tabulator: 1 Count 1077 for color Brown=19.603203494721516% Tabulator: 1 Count 1090 for color Yellow=19.839825263924283% Tabulator: 1 Count 1094 for color Green=19.912631962140516% Tabulator: 1 Count 1096 for color Blue=19.949035311248636% Tabulator: 2 Count 232 for color Red=19.414225941422593% Tabulator: 2 Count 232 for color Brown=19.414225941422593% Tabulator: 2 Count 243 for color Yellow=20.334728033472803% Tabulator: 2 Count 216 for color Green=18.07531380753138% Tabulator: 2 Count 272 for color Blue=22.761506276150627% Tabulator: 3 Count 79 for color Red=21.066666666666666% Tabulator: 3 Count 82 for color Brown=21.866666666666667% Tabulator: 3 Count 76 for color Yellow=20.266666666666666% Tabulator: 3 Count 85 for color Green=22.666666666666668% Tabulator: 3 Count 53 for color Blue=14.133333333333333% Tabulator: 4 Count 550 for color Red=20.161290322580644% Tabulator: 4 Count 573 for color Brown=21.00439882697947% Tabulator: 4 Count 564 for color Yellow=20.674486803519063% Tabulator: 4 Count 501 for color Green=18.365102639296186% Tabulator: 4 Count 540 for color Blue=19.794721407624632% Tabulator: 5 Count 44 for color Red=21.153846153846153% Tabulator: 5 Count 45 for color Brown=21.634615384615383% Tabulator: 5 Count 44 for color Yellow=21.153846153846153% Tabulator: 5 Count 32 for color Green=15.384615384615385% Tabulator: 5 Count 43 for color Blue=20.673076923076923% ==Totals== Color Red composes 20.42% of the total Color Brown composes 20.09% of the total Color Yellow composes 20.17% of the total Color Green composes 19.28% of the total Color Blue composes 20.04% of the total

The program was run with 5 threads. There are 10000 M&Ms. The number of M&Ms and portion calculated by each tabulator are printed by the class ThreadStatisticsSetup. Each thread in the RequestProcessor class must use a lock before accessing the collection. The threads must be as concurrent as possible, within reason. Each thread must have its own private area to store the total and individual color count processed by it. This private area must be supplied by ThreadStatisticsSetup. Moreover, these private areas must be stored in a queue by ThreadStatisticsSetup, so that class can easily print the queue in response to the call ThreadStatisticsSetup.print(). The generic queue can be used both for the collection of colors and the collection of private areas. Each thread must dequeue a single M&M color from the collection, process the M&M by updating the sum for the color to which that M&M corresponds. Each thread must count the colors it dequeues, not enqueue individual colors for ThreadStatisticsSetup to count. The private data area for each thread must be a count of colors, not a queue of separate M&Ms.

Your program may either use ThreadLocal for counting on each thread, or it may use separate class instances. The lock must be held only where absolutely necessary. Code that uses locks to run almost entirely in a single thread will receive very few points. You should verify that your code behaves correctly by testing it with many more than the required number of M&Ms, verifying that the totals you produce make sense, and adding a brief delay using Thread.sleep(10) (which you should remove before submission), and printing messages outside of locked code to verify that threads run concurrently. You can determine the unique id of the thread that is running by making Thread.currentThread().getId() call. The code you submit does not need to print this information.

When printing the M&Ms, the following colors correspond to each integer:

0: Red 1: Brown 2: Yellow 3. Green 4. Blue

This is what I have so far.

Queue.java

public class Queue {

// Link reference to front node

private Link front;

// Link reference to rear node

private Link rear;

// constructor initializing empty queue

public Queue() {

front = rear = null;

}

// method to add an object to the end of the queue

public void enqueue(T ob) {

// creating a link with ob as data

Link link = new Link(ob);

// adding as front & rear node if front is null (empty queue)

if (front == null) {

front = link;

rear = link;

} else {

// otherwise appending to rear and updating rear

rear.next = link;

rear = link;

}

}

// method to remove and return front element from the queue

public T dequeue() {

// if front is null (empty queue), returning null

if (front == null) {

return null;

}

// otherwise storing data of front node

T data = front.data;

// advancing front node

front = front.next;

// updating rear if front just become null

if (front == null) {

rear = null;

}

// returning data

return data;

}

// method to return front element from the queue without removing

public T front() {

// if front is null (empty queue), returning null

if (front == null) {

return null;

}

// otherwise returning data of front node

return front.data;

}

// returns true if queue is empty, false if not

public boolean isEmpty() {

// queue is empty if front is null

return front == null;

}

// an inner class to represent the Link, should be within Queue class

class Link {

// making data and next fields public, so that we can easily access them

// without methods

public T data;

public Link next;

// constructor taking initial value for data

public Link(T d) {

data = d;

next = null;

}

}

}

ThreadStatisticsSetup.java

public class ThreadStatisticsSetup {

public static void main(String[] args) {

Queue collection = new Queue();

for (int index = 0; index < 10000; index++) {

int mm = ((int) (Math.random() * 10000)) % 5;

@SuppressWarnings("deprecation")

Integer integ = new Integer(mm);

collection.enqueue(integ);

}

RequestProcessor processor = new RequestProcessor(collection);

int numberOfThreads = 5;

Thread[] threads = new Thread[numberOfThreads];

for (int index = 0; index < threads.length; index++) {

threads[index] = new Thread(processor);

threads[index].start();

}

try {

for (int index = 0; index < threads.length; index++) {

threads[index].join();

}

} catch (InterruptedException ie) {

ie.printStackTrace();

}

ThreadStatisticsSetup.print();

}

private static void print() {

// TODO Auto-generated method stub

}

}

I need help with the RequestProcessor Class

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Pro SQL Server Wait Statistics

Authors: Enrico Van De Laar

1st Edition

1484211391, 9781484211397

More Books

Students also viewed these Databases questions

Question

Describe Table Structures in RDMSs.

Answered: 1 week ago