在Blackberry Java参考中,我似乎找不到任何与Semaphore等同的东西。我遗漏了什么?java.util.concurrent甚至都不在那里。
谢谢!肖恩
发布于 2009-10-30 22:03:38
因此,对于遇到这个问题的任何人,coldice的优秀答案将我带到这个页面,该页面解释了如何使用J2ME http://tutorials.jenkov.com/java-concurrency/semaphores.html中提供的等待/通知原语实现各种类型的信号量。谢谢!
发布于 2009-10-30 14:37:28
来自Using Threads in J2ME Applications by Eric Giguere :
监视器维护一个等待线程的队列,一次只允许一个线程进入阻塞。
因为每个java.lang.Object对象都可以充当监视器,所以wait类定义了三个方法来公开这个基本功能: wait()、notify()和notifyAll()。任何线程都可以通过调用对象的wait()方法来挂起自己:
...
Object obj = .... // some object to use as a lock
synchronized( obj ){
// here is where you'd check obj's state
try {
obj.wait();
}
catch( InterruptedException e ){
}
}
...等待线程必须在调用其
()方法之前锁定对象。它还必须捕获java.lang.InterruptedException并适当地处理线程中断。线程在挂起自身后隐式释放其对对象的锁定。
wait()方法是重载的:如果线程不想无限期地等待,它可以指定一个以毫秒为单位的可选超时。
一旦一个线程挂起了自己,另一个线程就会通过调用同一对象的notify()或notifyAll()方法来释放它:
...
Object obj = .... // same object used as lock!
synchronized( obj ){
obj.notify(); // or notifyAll
}
...再次通知,第二个线程必须在调用
()或notifyAll()之前锁定对象。这两个方法的行为相同,只是一个方法唤醒一个等待线程,而另一个方法唤醒所有等待线程。未指定唤醒线程的顺序。每个新唤醒的线程必须重新获得它在对象上的锁,然后才能实际继续,因为当它挂起自己时,它在对象上的锁已被隐式释放。
https://stackoverflow.com/questions/1647750
复制相似问题