Hallo erstmal,
ich möchte meinen Schülern veranschaulichen, dass Fehler die durch Nebenläufigkeit entstehen können durchaus häufig treten. Deshalb habe ich zwei Klassen programmiert.
Beim ersten Durchlauf funktioniert auch alles wunderbar und es treten durchschnittlich ca. 20 Fehler auf. Beim zweiten Durchlauf noch bis zu fünf. Bei allen weiteren Durchläufen tritt jedoch nie ein Fehler auf. Warum ist das so?
Die Point Klasse mit x und y:
und die Thread-Test-Klasse:
ich möchte meinen Schülern veranschaulichen, dass Fehler die durch Nebenläufigkeit entstehen können durchaus häufig treten. Deshalb habe ich zwei Klassen programmiert.
Beim ersten Durchlauf funktioniert auch alles wunderbar und es treten durchschnittlich ca. 20 Fehler auf. Beim zweiten Durchlauf noch bis zu fünf. Bei allen weiteren Durchläufen tritt jedoch nie ein Fehler auf. Warum ist das so?
Die Point Klasse mit x und y:
Java:
public class Point
{
// instance variables - replace the example below with your own
private int x;
private int y;
/**
* Constructor for objects of class Point
*/
public Point()
{
// initialise instance variables
x = 0;
y = 0;
}
public void setX(int x)
{
this.x = x;
}
public void setY(int y)
{
this.y = y;
}
public boolean istXgleichY() {
//System.out.print("P: ("+x+", "+y+")");
return x == y;
}
}
und die Thread-Test-Klasse:
Java:
public class ThreadUnsynchronized extends Thread {
private static Point p = new Point();
private int pos;
public ThreadUnsynchronized(int pos) {
this.pos = pos;
}
public void run() {
for (int i=0;i<100000;i++) {
p.setX(pos);
p.setY(pos);
if (!p.istXgleichY()) {
System.out.println("\nFehler im Durchgang "+i+": x != y");
}
}
System.out.println(pos+". Thread fertig");
}
public static void testThreads() {
Thread t1 = new ThreadUnsynchronized(1);
Thread t2 = new ThreadUnsynchronized(2);
Thread t3 = new ThreadUnsynchronized(3);
Thread t4 = new ThreadUnsynchronized(4);
t1.start();
t2.start();
t3.start();
t4.start();
}
}