Re: Quick Questions on Syntax
Miles wrote:
Hi all,
Reading over threads in the Concurrency trail on Sun's tutorials and noticed the
following:
public class ProducerConsumerExample {
public static void main(String[] args) {
Drop drop = new Drop();
(new Thread(new Producer(drop))).start();
(new Thread(new Consumer(drop))).start();
}
}
Curious as to why the presence of the outer parenthesis? Is the line casting
the Producer as a "new thread".
If so, why is it necessary instead of just using new by itself? Is it because
the object is instantiated directly and not being assigned to a variable?
Thanks for clarification.
--
Miles
Umm I think you are talking about the lines that look like:
(new Thread(new Producer(drop))).start();
....correct?
To me it looks like they are creating a new Thread object and calling
start() on it, without assigning the new object to a variable. I am
pretty sure this is legal, but I don't think you can reference the
object that gets created here after it's been created (since you have
nothing to reference it by) so I'm not sure what the point of this way
of doing thins is. This syntax is not something I see very often, and
I'm not sure I see a point to it, except maybe for brevity for simple
examples.
Maybe someone who has a non-trivial example of the way to use this can
correct me? It might be an accepted practice for working with threads
in Java, although it's been a while since I've done Java threads (and
I never saw this syntax back then).