Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #3869
| Path | csiph.com!x330-a1.tempe.blueboxinc.net!aioe.org!eternal-september.org!feeder.eternal-september.org!.POSTED!not-for-mail |
|---|---|
| From | Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> |
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: streaming problem and thread freeze |
| Date | Mon, 09 May 2011 20:08:08 +0200 |
| Organization | A noiseless patient Spider |
| Lines | 153 |
| Message-ID | <iq9ai7$t2s$1@dont-email.me> (permalink) |
| References | <005a9e79-36fe-4bf1-aa1d-bda3a5aaebf2@glegroupsg2000goo.googlegroups.com> |
| Mime-Version | 1.0 |
| Content-Type | text/plain; charset=ISO-8859-1; format=flowed |
| Content-Transfer-Encoding | 7bit |
| Injection-Date | Mon, 9 May 2011 18:08:07 +0000 (UTC) |
| Injection-Info | mx03.eternal-september.org; posting-host="eqwapO8qsHb4cGrXAkvi3g"; logging-data="29788"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+ZRkgUJEiVooWrduXUaGFU" |
| User-Agent | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.2.17) Gecko/20110414 Thunderbird/3.1.10 |
| In-Reply-To | <005a9e79-36fe-4bf1-aa1d-bda3a5aaebf2@glegroupsg2000goo.googlegroups.com> |
| Cancel-Lock | sha1:sAhFYS70adY66Fp91Uh1Pm7xZ8M= |
| Xref | x330-a1.tempe.blueboxinc.net comp.lang.java.programmer:3869 |
Show key headers only | View raw
On 09/05/2011 16:56, Fly allegedly wrote:
> Hello,
> I have a client program that read an XML from a STREAM every 60 seconds.
> From the main Thread I do an infinite loop where I create a new working thread
> executing all the operations: read, parse, etc..
>
> This is what I do:
>
> <code>
> DownloaderTask tempTask = null;
>
> while (true) {
>
> if (tempTask != null) {
> if (tempTask.isAlive()) {
> tempTask.cancel();
> }
> }
>
> tempTask = new DownloaderTask();
>
> tempTask.start();
>
> try {
> sleep(frequency * 1000);
> } catch (InterruptedException ex) {
> log.severe("Main sleep failed");
> }
>
> }
>
> </code>
>
> Inside the Run method of the DownloaderTask, I first read from the Stream (a class field) with a BufferedReader, in this way:
>
> <code>
> private String readDocumentFromStream(BufferedReader reader) throws IOException {
> char[] buffer = new char[4 * 1024];
> int charsRead = -1;
> String retVal = "";
> log.finer("---START reading XML ---");
>
> while ((charsRead = reader.read(buffer, 0, 4 * 1024)) != -1)
> {
> log.log(Level.FINER, "CharsRead: {0}", charsRead);
> retVal += String.copyValueOf(buffer, 0, charsRead);
> }
> log.finer("---STOP reading XML---");
>
> return retVal;
> }
> </code>
>
> In the DownloaderTask class I wrote a cancel() method, called by the main thread in the case the working thread was still alive after the sleep().
>
>
> It's definition:
>
> <code>
> synchronized public void cancel() {
>
> this.interrupt();
> try {
> if (rd != null) {
> rd.close();
> }
> } catch (IOException ex) {
> log.severe(ex.getMessage());
> }
>
> http_conn.disconnect();
>
> log.log(Level.SEVERE, "Timeout. Thread {0} is being canceled and resource released.", this.getId());
>
> }
> </code>
>
> My problems.
>
> Sometimes I see my program active, doing nothing, blocked probably in the read(), because if I check all logs, the last line written is "CharsRead: xxx" and no more.
> Here I post one of my saved log (where the read buffer was 1024 bytes):
>
> <LOG>
> ||-- 2011-05-03 06:44:59 FINE: Updating events data... --||
> ||-- 2011-05-03 06:44:59 FINE: Events updated! --||
> ||-- 2011-05-03 06:44:59 INFO: Release date: 2011-05-03 06:45:15 | Received: 187 Inserted: 0 Updated: 0 Deleted: 0 ||| Errors: 2 --||
> ||-- 2011-05-03 06:44:59 FINER: Normal closing thread 1.723 --||
> ||-- 2011-05-03 06:44:59 FINER: Thread 1.723 Closing --||
> ||-- 2011-05-03 06:45:52 FINER: Thread 1.725 Opening --||
> ||-- 2011-05-03 06:45:52 FINE: Opening server connection to: mysite.com:80 --||
> ||-- 2011-05-03 06:46:19 FINE: Reading From Stream --||
> ||-- 2011-05-03 06:46:19 FINER: ---START reading XML --- --||
> ||-- 2011-05-03 06:46:19 FINER: CharsRead: 1.024 --||
> ||-- 2011-05-03 06:46:19 FINER: CharsRead: 1.024 --||
> ||-- 2011-05-03 06:46:19 FINER: CharsRead: 1.024 --||
> ||-- 2011-05-03 06:46:19 FINER: CharsRead: 929 --||
> ||-- 2011-05-03 06:46:19 FINER: CharsRead: 1.024 --||
> ||-- 2011-05-03 06:46:19 FINER: CharsRead: 1.024 --||
> ||-- 2011-05-03 06:46:19 FINER: CharsRead: 872 --||
> </LOG>
>
> I noticed another strange thing in this log, that is I can't see the Thread Id: 1724.
> Can you help me to find where I am wrong? In the logic or maybe in the syntax of the program?
>
> Thanks in advance,
> Flavio
A few things:
Firstly, dunno if this will help the problem, but your main loop ought
to look something like this:
DownloaderTask tempTask = null;
for( Thread t = Thread.currentThread(); ! t.isInterrupted(); ){
if (tempTask != null) {
if (tempTask.isAlive()) {
tempTask.cancel();
}
}
tempTask = new DownloaderTask();
tempTask.start();
try {
TimeUnit.SECONDS.sleep( frequency ); // ;)
}
catch (InterruptedException ex) {
*t.interrupt();*
}
}
Always re-interrupt when you've caught an InterruptedException. The
reason is that catching that exception *clears* the interrupted status.
You possibly might as well try a join() on the worker thread, BTW.
And have a look at java.util.concurrent.Executors.
Secondly, although it is only a minor thing and only my personal
opinion, this:
} catch (IOException ex) {
log.severe(ex.getMessage());
}
is a *very* bad idea. Log the full stack. The message is next to useless
as soon as the code becomes a little complex.
HTH,
--
DF.
An escaped convict once said to me:
"Alcatraz is the place to be"
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar
streaming problem and thread freeze Fly <flavio80@gmail.com> - 2011-05-09 07:56 -0700
Re: streaming problem and thread freeze Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2011-05-09 20:08 +0200
Re: streaming problem and thread freeze Lawrence D'Oliveiro <ldo@geek-central.gen.new_zealand> - 2011-05-10 15:31 +1200
Re: streaming problem and thread freeze markspace <-@.> - 2011-05-10 04:47 -0700
Re: streaming problem and thread freeze Lew <noone@lewscanon.com> - 2011-05-10 08:52 -0400
Re: streaming problem and thread freeze Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2011-05-10 21:17 +0200
Re: streaming problem and thread freeze Lew <noone@lewscanon.com> - 2011-05-10 17:26 -0400
Re: streaming problem and thread freeze Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2011-05-11 18:55 +0200
Re: streaming problem and thread freeze Lawrence D'Oliveiro <ldo@geek-central.gen.new_zealand> - 2011-05-11 14:06 +1200
Re: streaming problem and thread freeze Lew <noone@lewscanon.com> - 2011-05-11 09:02 -0400
csiph-web