Date: Wed, 02 Jun 2004 21:42:59 +0200 From: "Ronald Klop" <ronald@cs.vu.nl> To: "Daniel Fisher" <daniel.fisher@vt.edu>, java@freebsd.org Subject: Re: possible threading problem Message-ID: <opr8zfpxqaydasmi@outgoing.local> In-Reply-To: <20040602095245.48cb3c44@psych.iad.vt.edu> References: <20040601154601.0869f5b4@psych.iad.vt.edu> <40BD7C06.5050205@noc.ntua.gr> <20040602095245.48cb3c44@psych.iad.vt.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 2 Jun 2004 09:52:45 -0400, Daniel Fisher <daniel.fisher@vt.edu> wrote: > On Wed, 02 Jun 2004 10:04:38 +0300 > Panagiotis Astithas <past@noc.ntua.gr> wrote: > >> Daniel Fisher wrote: >> > I'm experiencing a weird threading problem with jdk-1.4.2p6_3 that I >> don't >> > see on Linux. >> > It looks like the BSD JDK is not honoring sychronize statements. >> > Has anyone seen this before? >> > If not, who should I send sample code to? >> >> Um, the list? >> -- >> Panagiotis Astithas > > Alrighty then.... > attached is a tarball with the sample classes in it. > Untar and cd into the directory. > Execute: java -jar prop.jar > These classes monitor the main.properties file and echo the changes to > stdout. > Edit main.properties while the java job is running. > FreeBSD JVM throws an InterruptedIOException, Linux JVM does not throw an > exception. Add debugging like, so you can make sure synchronized is (not) working. synchronized (a) { System.out.println("In a 1"); ... System.out.println("Out a 1"); } If I recompile your program I get other results after modifying the properties file. java.lang.NoClassDefFoundError: prop/PropEvent at prop.PropSingleton.removeProperties(PropSingleton.java:74) at prop.PropMonitor.run(PropMonitor.java:71) at java.lang.Thread.run(Thread.java:534) PropMonitor interrupts itself. Why? it's useless. By the way if you don't do this your program works. Offtopic: In PropMonitor you catch Exception. So you will mis all other possible error messages from java. If this is not just a test class I would rewrite it. Why this: try { throw Exception(); } catch (Exception) { break; } You can also just do break in stead of the exception. And you can remove all the interrupt/interrupted calls. Only keep the boolean run. And even nicer than the break is setting run = false to end the while. But only removing the stopMonitor call from PropMonitor.run() will also make it work. :-) Ronald. -- Ronald Klop Vrije Universiteit, Amsterdam, The Netherlands
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?opr8zfpxqaydasmi>