Saya memiliki aplikasi multi-utas di mana sebuah utas mengirim pesan ke utas lain. Thread yang menunggu melakukan polling untuk pesan tersebut dan bereaksi (penguncian ditangani). Seperti ini:
Kode thread tunggu:
while(true)
{
if(helloArrived())
System.out.println("Got hello");
if(byeArrived())
System.out.println("Got bye");
if(stopArrived())
break;
}
Saya ingin menghindari teknik memonopoli cpu ini dan menggunakan sesuatu yang lain sebagai gantinya. Ada ide?
Sunting: Kode sebenarnya ada di bawah:
BlockingQueue<Mail> killMeMailbox = new LinkedBlockingQueue<Mail>();
BlockingQueue<Mail> messageMailbox = new LinkedBlockingQueue<Mail>();
public void run()
{
while(true)
{
if(killMeMailbox.size() > 0)
{
break;
}
if(messageMailbox.size() > 0)
{
System.out.println(messageMailbox.poll());
}
}
}
public void receiveMail(Mail mail)
{
//kill
if(mail.from == -1)
{
killMeMailbox.add(0);
}
else
{
//other
try
{
messageMailbox.put(mail);
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}