Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #18920
| From | Jan Burse <janburse@fastmail.fm> |
|---|---|
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: Interrupted exception chaining |
| Date | 2012-09-25 22:47 +0200 |
| Organization | albasani.net |
| Message-ID | <k3t59s$i1e$1@news.albasani.net> (permalink) |
| References | <d203b18b-61ce-439e-9b1f-9cf056c1d161@googlegroups.com> <ETk8s.3$kz7.0@newsfe02.iad> <k3t429$f84$1@news.albasani.net> <k3t4lq$tmk$1@dont-email.me> |
Hi,
Anyway the code that will notify c should also set some state.
If it doesn't we cannot distinguish between a spurious wait (*) and
a wait by a notify. So code must use a loop, and to not confuse
the done flag and loop breaking, we can just shift the try/catch
outside of the loop, and even outside of the synchronized to
minimize the monitor region:
public boolean done; /* should be set by the thread that
notifies the lock */
public Object lock = new Object();
public void uninterruptedWait() {
try {
synchronized(lock) {
while (!done)
lock.wait();
}
} catch (InterruptedException x) {
Thread.currentThread().interrupt();
}
}
(*)
The doc mentions it explicitly:
As in the one argument version, interrupts and *spurious wakeups* are
possible, and this method should always be used in a *loop*:
http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait%28%29
Bye
markspace schrieb:
> That's actually a fair point. "Doesn't throw" isn't the same as
> "ignore." However, ReentrantLock is probably still better than the
> following code.
>
>
> /** A questionable method: wait without throwing InterruptedException. */
> public void uninterruptableWait(Object c) {
> boolean interrupted = false;
> try {
> synchronized(c) {
> try {
> c.wait();
> return;
> } catch(InterruptedExcpetion ex ) {
> interrupted = true;
> }
> }
> } finally {
> if(interrupted == true ) Thread.currentThread().interrupt();
> }
> }
>
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Interrupted exception chaining raphfrk@gmail.com - 2012-09-25 03:25 -0700
Re: Interrupted exception chaining Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-09-25 08:56 -0400
Re: Interrupted exception chaining markspace <-@.> - 2012-09-25 08:33 -0700
Re: Interrupted exception chaining Ivan Ryan <ivan.ryan@gmail.com> - 2012-09-25 09:28 -0700
Re: Interrupted exception chaining Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-09-25 13:12 -0400
Re: Interrupted exception chaining markspace <-@.> - 2012-09-25 12:00 -0700
Re: Interrupted exception chaining Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2012-09-25 09:22 -0700
Re: Interrupted exception chaining Jan Burse <janburse@fastmail.fm> - 2012-09-25 22:26 +0200
Re: Interrupted exception chaining markspace <-@.> - 2012-09-25 13:37 -0700
Re: Interrupted exception chaining Jan Burse <janburse@fastmail.fm> - 2012-09-25 22:47 +0200
Re: Interrupted exception chaining Jan Burse <janburse@fastmail.fm> - 2012-09-25 22:53 +0200
Re: Interrupted exception chaining Jan Burse <janburse@fastmail.fm> - 2012-09-25 22:53 +0200
Re: Interrupted exception chaining markspace <-@.> - 2012-09-25 14:08 -0700
Re: Interrupted exception chaining Jan Burse <janburse@fastmail.fm> - 2012-09-25 23:23 +0200
Re: Interrupted exception chaining Jan Burse <janburse@fastmail.fm> - 2012-09-25 23:24 +0200
Re: Interrupted exception chaining Jan Burse <janburse@fastmail.fm> - 2012-09-25 23:32 +0200
Re: Interrupted exception chaining Jan Burse <janburse@fastmail.fm> - 2012-09-25 23:42 +0200
Re: Interrupted exception chaining Jan Burse <janburse@fastmail.fm> - 2012-09-25 23:48 +0200
Re: Interrupted exception chaining Jan Burse <janburse@fastmail.fm> - 2012-09-25 23:55 +0200
Re: Interrupted exception chaining markspace <-@.> - 2012-09-25 15:33 -0700
Re: Interrupted exception chaining Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-09-25 21:43 -0400
Re: Interrupted exception chaining Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2012-09-26 01:43 +0200
Re: Interrupted exception chaining Jan Burse <janburse@fastmail.fm> - 2012-09-26 10:24 +0200
Re: Interrupted exception chaining Jan Burse <janburse@fastmail.fm> - 2012-09-26 10:32 +0200
Re: Interrupted exception chaining Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2012-09-26 16:26 +0200
csiph-web