Мне нужно реализовать консенсусный протокол, который использует очередь с методом peek(), чтобы показать, что можно достичь консенсуса для любого количества потоков , то есть очереди с методом быстрого взгляда() имеет бесконечное консенсусное числоРеализация консенсусного протокола с использованием очереди FIFO и метода peek()
Это мой код
import java.util.LinkedList;
import java.util.Queue;
public class PeekConsensus extends ConsensusProtocol<Integer>
{
Queue<Integer> queue ;
public PeekConsensus(int threadCount)
{
super(threadCount); //threadCount is a command line argument from the main class specifying the number of threads to handle this process
queue = new LinkedList<Integer>() //FIFO queue
}
public Integer decide(Integer value)
{
this.propose(value); // stores "value" in a vector named proposed, at index ThreadID.get()
int i = ThreadID.get() ;
queue.add(i)
System.out.println("Thread " + i + " : " + i) ; // Required by specifications to print thread id and the value added when an item is enqueued
System.out.println("Thread " + i + " : " + queue.peek()) ; // Required by specifications to print thread id and the value of peek() when when peek() is called
return proposed.elementAt(queue.peek()) ;
}
}
в моем понимании это должно работать, так как если два поток возвращают разные значения, заглядывать() будет от того, чтобы возвратить различные идентификаторы потоков, и действительность гарантирована, потому что каждый поток записывает свое собственное значение в предложение, прежде чем нажимать свой идентификатор потока.
ли кто-нибудь в состоянии понять, где о я буду неправильно и вести меня в исправлении моего кода
Сначала мы должны знать, что с ним не так. – ChiefTwoPencils
Неясно, какую ошибку вы видите, но одна проблема может заключаться в том, что LinkedList не является потокобезопасным. Использование потокового безопасного варианта очереди может помочь. –
Изменение нового LinkedList в новый LinkedBlockingQueue(), вероятно, позволит вам получить больше, чем на полпути ... – lscoughlin