Skip to content

Instantly share code, notes, and snippets.

@VincentTatan
Last active November 26, 2015 01:15
Show Gist options
  • Save VincentTatan/b1b31113bb2a0d4b7014 to your computer and use it in GitHub Desktop.
Save VincentTatan/b1b31113bb2a0d4b7014 to your computer and use it in GitHub Desktop.
run:
Creating tasks. main
..........................Item 120 removed from queue by Worker
.....Item 119 removed from queue by Worker
.....Item 118 removed from queue by Worker
.....Item 117 removed from queue by Worker
.....Item 116 removed from queue by Worker
Item 115 removed from queue by New Worker
Item 114 removed from queue by New Worker
Item 113 removed from queue by New Worker
Item 112 removed from queue by New Worker
.....Item 111 removed from queue by Worker
Item 110 removed from queue by New Worker
Item 109 removed from queue by New Worker
Item 108 removed from queue by New WorkerItem 107 removed from queue by New Worker
Item 106 removed from queue by New Worker
Item 105 removed from queue by New Worker
Item 104 removed from queue by New Worker
Item 103 removed from queue by New Worker
.....Item 102 removed from queue by Worker
Item 101 removed from queue by New Worker
Item 100 removed from queue by New Worker
Item 99 removed from queue by New Worker
Item 98 removed from queue by New Worker
Item 97 removed from queue by New Worker
Item 96 removed from queue by New Worker
Item 95 removed from queue by New Worker
Item 94 removed from queue by New Worker
.....Item 93 removed from queue by Worker
Item 92 removed from queue by New Worker
Item 91 removed from queue by New Worker
Item 90 removed from queue by New Worker
Item 89 removed from queue by New Worker
Item 88 removed from queue by New Worker
Item 87 removed from queue by New Worker
Item 86 removed from queue by New Worker
Item 85 removed from queue by New Worker
.....Item 84 removed from queue by Worker
Item 83 removed from queue by New Worker
Item 82 removed from queue by New Worker
Item 81 removed from queue by New Worker
Item 80 removed from queue by New Worker
.Item 79 removed from queue by New Worker
.Item 78 removed from queue by New Worker
.Item 77 removed from queue by New Worker
.Item 76 removed from queue by New Worker
.Item 75 removed from queue by Worker
.Item 74 removed from queue by New Worker
.Item 73 removed from queue by New Worker
.Item 72 removed from queue by New Worker
.Item 71 removed from queue by New Worker
.Item 70 removed from queue by New Worker
.Item 69 removed from queue by New Worker
.Item 68 removed from queue by New Worker
.Item 67 removed from queue by New Worker
.Item 66 removed from queue by Worker
.Item 65 removed from queue by New Worker
Item 64 removed from queue by New Worker
.Item 63 removed from queue by New Worker
.Item 62 removed from queue by New Worker
.Item 61 removed from queue by New Worker
.Item 60 removed from queue by New Worker
.Item 59 removed from queue by New Worker
.Item 58 removed from queue by New Worker
.Item 57 removed from queue by New Worker
.Item 56 removed from queue by Worker
.Item 55 removed from queue by New Worker
.Item 54 removed from queue by New Worker
.Item 53 removed from queue by New Worker
.Item 52 removed from queue by New Worker
.Item 51 removed from queue by New Worker
.Item 50 removed from queue by New Worker
.Item 49 removed from queue by New Worker
.Item 48 removed from queue by New Worker
.Item 47 removed from queue by New Worker
.Item 46 removed from queue by New Worker
.Item 45 removed from queue by New Worker
.Item 44 removed from queue by New Worker
.Item 43 removed from queue by Worker
.Item 42 removed from queue by New Worker
.Item 41 removed from queue by New Worker
.Item 40 removed from queue by New Worker
.Item 39 removed from queue by New Worker
.Item 38 removed from queue by New Worker
.Item 37 removed from queue by New Worker
.Item 36 removed from queue by New Worker
.Item 35 removed from queue by New Worker
.Item 34 removed from queue by Worker
.Item 33 removed from queue by New Worker
.Item 32 removed from queue by New Worker
.Item 31 removed from queue by New Worker
.Item 30 removed from queue by New Worker
.Item 29 removed from queue by New Worker
.Item 28 removed from queue by New Worker
.Item 27 removed from queue by New Worker
.Item 26 removed from queue by New Worker
.Item 25 removed from queue by Worker
.Item 24 removed from queue by New Worker
Item 23 removed from queue by New Worker
Item 22 removed from queue by New Worker
Item 21 removed from queue by New Worker
Item 20 removed from queue by New Worker
Item 19 removed from queue by New Worker
Item 18 removed from queue by New Worker
Item 17 removed from queue by New Worker
Item 16 removed from queue by New Worker
Item 15 removed from queue by New Worker
Item 14 removed from queue by New Worker
Item 13 removed from queue by Worker
Item 12 removed from queue by New Worker
Item 11 removed from queue by New Worker
Item 10 removed from queue by New Worker
Item 9 removed from queue by New Worker
Item 8 removed from queue by New Worker
Item 7 removed from queue by New Worker
Item 6 removed from queue by New Worker
Item 5 removed from queue by New Worker
Item 4 removed from queue by Worker
Item 3 removed from queue by New Worker
Item 2 removed from queue by New Worker
Item 1 removed from queue by New Worker
Item 0 removed from queue by New Worker
package queues;
import java.util.*;
import java.util.concurrent.locks.ReentrantLock;
/**
* Modify the code to have different numbers of threads removing tasks from the
* queue. Launch threads before you exceed the service level agreement (greater
* than 10000 milliseconds). Stop threads before you start processing tasks
* faster than the SLA (less than 5000 milliseconds). Do not remove or alter the
* Thread.sleep() commands. These represent work being done. Once you have your
* code working with time=12, change time to equal 120 and test your code again.
*/
public class ServiceLevelDuration implements Runnable {
static Queue<HashMap> queue;
static ReentrantLock lock = new ReentrantLock();
public void run(){
try {
// This while loop should be handled by worker threads.
while (!queue.isEmpty()) {
lock.lock();
HashMap item = queue.remove();
long stop_ms = System.currentTimeMillis();
long start_ms = (long) item.get("created");
long duration = stop_ms - start_ms;
while (duration <= 5000) {
stop_ms = System.currentTimeMillis();
duration = stop_ms - start_ms;
}
lock.unlock();
System.out.print("Item " + item.get("id") + " removed from queue by " + Thread.currentThread().getName());
//Add new workers in case time is exceeded
if (duration > 7500) {
Thread secondWorker = new Thread(new ServiceLevelDuration(), "New Worker");
secondWorker.start();
}
// Check and report of service level status.
if (duration < 5000) {
System.out.println("Breaking SLA. Too fast. duration=" + duration);
} else if (duration < 10000) {
System.out.println("");
} else {
System.out.println("Breaking SLA. Too slow. duration=" + duration);
}
Thread.sleep(1000);
}
} catch (Exception e) {
}
}
public static void main(String[] args) throws InterruptedException {
int itemsToQueue = 120;
//int time = 120;
queue = new LinkedList<HashMap>();
System.out.println("Creating tasks. " + Thread.currentThread().getName());
//Create Thread of the first worker
Thread fworker = new Thread(new ServiceLevelDuration(), "Worker");
// This for loop should stay in the main thread.
for (int i = itemsToQueue; i >= 0; i--) {
System.out.print(".");
// Create a hash map to hold the id and create time.
HashMap hm = new HashMap();
long start_ms = System.currentTimeMillis();
hm.put("created", start_ms);
hm.put("id", i);
queue.add(hm);
Thread.sleep(200);
if (!fworker.isAlive()){
fworker.start();
}
}
System.out.println("");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment