首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Blackberry Semaphore类

Blackberry Semaphore类
EN

Stack Overflow用户
提问于 2009-10-30 10:51:19
回答 2查看 970关注 0票数 2

在Blackberry Java参考中,我似乎找不到任何与Semaphore等同的东西。我遗漏了什么?java.util.concurrent甚至都不在那里。

谢谢!肖恩

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-30 22:03:38

因此,对于遇到这个问题的任何人,coldice的优秀答案将我带到这个页面,该页面解释了如何使用J2ME http://tutorials.jenkov.com/java-concurrency/semaphores.html中提供的等待/通知原语实现各种类型的信号量。谢谢!

票数 1
EN

Stack Overflow用户

发布于 2009-10-30 14:37:28

来自Using Threads in J2ME Applications by Eric Giguere

监视器维护一个等待线程的队列,一次只允许一个线程进入阻塞。

因为每个java.lang.Object对象都可以充当监视器,所以wait类定义了三个方法来公开这个基本功能: wait()、notify()和notifyAll()。任何线程都可以通过调用对象的wait()方法来挂起自己:

代码语言:javascript
复制
...
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()方法来释放它:

代码语言:javascript
复制
...
Object obj = .... // same object used as lock!

synchronized( obj ){
    obj.notify();  // or notifyAll
}
...

再次通知,第二个线程必须在调用

()或notifyAll()之前锁定对象。这两个方法的行为相同,只是一个方法唤醒一个等待线程,而另一个方法唤醒所有等待线程。未指定唤醒线程的顺序。每个新唤醒的线程必须重新获得它在对象上的锁,然后才能实际继续,因为当它挂起自己时,它在对象上的锁已被隐式释放。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1647750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档