Re: Working with threads. Example from java docs
Hi Progzmaster,
Try this:
public static void one() {
i++;
Thread.yield();
j++;
}
Also this line "if ( this.interrupted() )" would b better if written
like this "if ( Thread.interrupted() )" since interrupted is a static
method.
Cheers,
Dan Andrews
- - - - - - - - - - - - - - - - - - - - - - - -
Ansir Development Limited www.ansir.ca
- - - - - - - - - - - - - - - - - - - - - - - -
Progzmaster wrote:
Hello there I am learing java like everybody here and I ecounter a small
problem that I am unable to solve.
This is the link to Java lang. spec. "volatile fields"
http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.3.1.4
There is a paragraph:
-------------------------------------------------------------------------=
-------------------------------------------
If, in the following example, one thread repeatedly calls the method one
(but no more than Integer.MAX_VALUE times in all), and another thread
repeatedly calls the method two:
class Test {
static int i = 0, j = 0;
static void one() { i++; j++; }
static void two() {
System.out.println("i=" + i + " j=" + j);
}
}then method two could occasionally print a value for j that is greater t=
han
the value of i,
because the example includes no synchronization and, under the rules
explained in =A717,
the shared values of i and j might be updated out of order.
-------------------------------------------------------------------------=
----------------------------------------------
I tryied to write a simple program that is based on the above example so
that I can see different values of i and j.
I wrote one but unfortunatelly every time program runs each line shows the
same values for i and j.
Can you help me and fix my code or write another similar program that will
be doing such a thing
so I can belive that it could happen - ( method two could occasionally
print a value for j that is greater than the value of i )
This is my code:
-------------------------------------------------------------------------=
--------------------------
class Test
{
static int i=0, j=0;
public static void one() { i++; j++; }
public static void two()
{
System.out.println( "i=" + i + " j=" + j );
}
}
class T1 extends java.lang.Thread
{
public T1()
{
super();
start();
}
public void run( )
{
while( true )
{
Test.one();
if ( this.interrupted() ) return;
yield();
}
}
}
class T2 extends java.lang.Thread
{
public T2()
{
super();
start();
}
public void run( )
{
while( true )
{
Test.two();
if ( this.interrupted() ) return;
yield();
}
}
}
public class Ex01
{
public static void main( java.lang.String [] args )
throws java.lang.InterruptedException
{
T2 t2 = new T2( );
T1 t1 = new T1( );
Thread.sleep(2000);
t1.interrupt();
t2.interrupt();
}
}
-------------------------------------------------------------------------
Thank you
Progzmaster