Advertisement
Guest User

Untitled

a guest
Mar 31st, 2020
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.72 KB | None | 0 0
  1. import java.util.concurrent.Semaphore;
  2.  
  3. public class BlockingQueue<T> extends Thread{
  4.  
  5. T[] contents;
  6. int capacity;
  7. int front;
  8. int back;
  9.  
  10. public BlockingQueue(int capacity) {
  11. contents = (T[]) new Object[capacity];
  12. this.capacity = capacity;
  13. front = back = 0;
  14. }
  15.  
  16. public void enqueue(T item) throws InterruptedException {
  17. // if (this.back == this.capacity){
  18. // System.out.println("The Queue is full. Item will not be added.\n"); //polna redica
  19. // } else{
  20. // contents[back] = item; // dodava item i go zgolemuva back za 1;
  21. // back++;
  22. // }
  23. dequeueSemamphore.release(1);
  24. contents[back] = item;
  25. back++;
  26. }
  27. public T dequeue() throws InterruptedException {
  28. // if (this.back == 0){
  29. // System.out.println("Queue is empty\n");
  30. // return null;
  31. // }else{
  32. // T item = contents[0];
  33. // for (int i = 0; i < this.back-1; i++) {
  34. // contents[i] = contents[i+1];
  35. // }
  36. // contents[back] = null; // brisam element sto e ostanat na krajot;
  37. // this.back--;
  38. // return item;
  39. // }
  40. dequeueSemamphore.acquire();
  41. T item = contents[0];
  42. for (int i = 0; i < this.back-1; i++) {
  43. contents[i] = contents[i+1];
  44. }
  45. contents[back] = null;
  46. back--;
  47. return item;
  48.  
  49. }
  50. public void print(){
  51. if (front==back){
  52. System.out.println("Queue is empty...");
  53. return;
  54. }
  55. for (int i = front; i < back; i++) {
  56. System.out.print(contents[i] + " ");
  57. }
  58. System.out.println();
  59. }
  60.  
  61. public static Semaphore dequeueSemamphore = new Semaphore(0);
  62. public static void main(String[] args) throws InterruptedException {
  63. BlockingQueue<Integer> blockingQueue = new BlockingQueue<>(100);
  64. //treba da se testira
  65. blockingQueue.enqueue(2);
  66. blockingQueue.enqueue(3);
  67. blockingQueue.enqueue(5);
  68. blockingQueue.enqueue(1);
  69. blockingQueue.enqueue(7);
  70. blockingQueue.enqueue(0);
  71.  
  72. blockingQueue.print();
  73. System.out.println("Brisam");
  74. blockingQueue.dequeue();
  75. blockingQueue.dequeue();
  76. blockingQueue.dequeue();
  77. blockingQueue.dequeue();
  78. blockingQueue.dequeue();
  79. blockingQueue.dequeue(); //posleden legalen dequeue
  80. blockingQueue.dequeue(); //ilegalen dequeue. tuka nema da ima dozvoli pa programata se stava vo blocking mode
  81. blockingQueue.enqueue(5); //dodavam vo prazen queue
  82. blockingQueue.print(); // print metoda
  83. }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement