Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Java > Threads question

Reply
Thread Tools

Threads question

 
 
fishfry
Guest
Posts: n/a
 
      06-29-2004
I'm learning about threads and I noticed there are two different ways I
can implement a runnable object. In one way, I have one object and two
threads; in the other way, I have two objects and two threads. Like this:


// Two objects, two threads
public class Counter implements Runnable {
Thread t;
int Count;

Counter(String threadname) {
Count=0;
t = new Thread(this, threadname);
t.start();
}

public void run() {
while(t == Thread.currentThread()) {
Count++;
System.out.println("Thread " + t.getName()
+ " count = " + Count);
try {
t.sleep(1000); // in milliseconds
} catch (InterruptedException e) {}
}
}

public void stop() {
t = null;
}

public static void main(String args[]) {
// Two objects.
Counter c1 = new Counter("foo");
Counter c2 = new Counter("bar");
}
}

The output of this program is

Thread foo count = 1
Thread bar count = 1
Thread foo count = 2
Thread bar count = 2
Thread foo count = 3
Thread bar count = 3
Thread foo count = 4
Thread bar count = 4
etc.

Since each thread operates on its own instance of the object Counter,
each thread has its own copy of the instance variable Count.



// One object, two threads.
public class Counter2 implements Runnable {
int Count = 0;

Counter2() {
}

public void run() {
Thread t;
t = Thread.currentThread();
while(true) {
Count++;
System.out.println("Thread " + t.getName()
+ " count = " + Count);
try {
t.sleep(1000); // in milliseconds
} catch (InterruptedException e) {}
}
}

public void stop() {
// t = null;
}

public static void main(String args[]) {
Counter2 c1 = new Counter2();

// One object, two threads.
Thread t1 = new Thread(c1);
Thread t2 = new Thread(c1);

t1.start();
t2.start();
}
}

The output is

Thread Thread-0 count = 1
Thread Thread-1 count = 2
Thread Thread-0 count = 3
Thread Thread-1 count = 4
Thread Thread-0 count = 5
Thread Thread-1 count = 6
Thread Thread-0 count = 7
Thread Thread-1 count = 8
etc.

because there are two threads, each sharing the same object.

Are there names for these two ways of doing things? What are the
implications for synchronization, etc.? What else should I know about
these? And why don't any of the tutorials mention this interesting
distinction?
 
Reply With Quote
 
 
 
 
Roedy Green
Guest
Posts: n/a
 
      06-29-2004
On Tue, 29 Jun 2004 04:48:09 GMT, fishfry
<(E-Mail Removed)> wrote or quoted :

>because there are two threads, each sharing the same object.
>
>Are there names for these two ways of doing things?


Correct and incorrect.

The second way, if you run it long enough, you will eventually get
strange anomalies. You have to make sure the ++ is done atomically by
synchronising, not interleaving the fetch, add, store from two
different threads.


--
Canadian Mind Products, Roedy Green.
Coaching, problem solving, economical contract programming.
See http://mindprod.com/jgloss/jgloss.html for The Java Glossary.
 
Reply With Quote
 
 
 
 
Chris Smith
Guest
Posts: n/a
 
      06-29-2004
fishfry wrote:
> Are there names for these two ways of doing things? What are the
> implications for synchronization, etc.? What else should I know about
> these? And why don't any of the tutorials mention this interesting
> distinction?


You typically don't want to do the second of the two. It means that
instance fields of the Runnable are shared state, and need to be
protected with synchronization to guarantee consistent state. Something
that close the the thread's immediate task almost certainly ought to be
non-shared.

--
www.designacourse.com
The Easiest Way to Train Anyone... Anywhere.

Chris Smith - Lead Software Developer/Technical Trainer
MindIQ Corporation
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Java Threads - Get running threads Pedro Pinto Java 2 04-08-2008 11:44 PM
[new to threads] threads with UI and loop Une bévue Ruby 0 06-14-2006 10:22 AM
TB View, Threads, Threads with unread The Invisible Man Firefox 1 03-20-2006 02:09 AM
Standard Threads vs Weightless Threads yoda Python 2 08-01-2005 09:12 PM
threads without threads sindica@gmail.com C Programming 4 08-27-2004 09:25 PM



Advertisments