Darstellung des Synchronisierungsvorgangs von Lese- und Schreibprozessen mit Java
java_semaphor.zip - Download der nachfolgenden Java-Projekte.
|
public class SchreibenA extends Thread
{
public boolean einser = false;
public void run()
{
while(true)
{
for(int i=0;i<30;i++)
{
if(einser)
Hauptprogramm.arrA[i]=1;
else
Hauptprogramm.arrA[i]=0;
Hauptprogramm.pausieren(20);
}
//Erledige andere Aufgaben:
Hauptprogramm.pausieren(50);
einser = !einser;
}
}
}
Code 0-1: SchreibenA.java in Projekt 001_unkontrolliert
public class SchreibenB extends Thread
{
public boolean einser = false;
public void run()
{
while(true)
{
for(int i=0;i<30;i++)
{
if(einser)
Hauptprogramm.arrB[i]=1;
else
Hauptprogramm.arrB[i]=0;
Hauptprogramm.pausieren(20);
}
//Erledige andere Aufgaben:
Hauptprogramm.pausieren(50);
einser = !einser;
}
}
}
Code 0-2: SchreibenB.java in Projekt 001_unkontrolliert
public class LesenC extends Thread
{
public void run()
{
while(true)
{
System.out.println("C liest nun arrA aus:");
for(int i=0;i<30;i++)
{
System.out.print(Hauptprogramm.arrA[i]);
Hauptprogramm.pausieren(100);
}
System.out.println();
System.out.println("C liest nun arrB aus:");
for(int i=0;i<30;i++)
{
System.out.print(Hauptprogramm.arrB[i]);
Hauptprogramm.pausieren(100);
}
System.out.println();
//Erledige andere Aufgaben:
Hauptprogramm.pausieren(200);
}
}
}
Code 0-3: LesenC.java in Projekt 001_unkontrolliert
public class Hauptprogramm
{
public static int[] arrA={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
public static int[] arrB={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
public static void pausieren(long ms)
{
try
{
Thread.sleep(ms);
}
catch(Exception e)
{
}
}
public static void main(String[] args)
{
SchreibenA schreibenA = new SchreibenA();
SchreibenB schreibenB = new SchreibenB();
LesenC lesenC = new LesenC();
schreibenA.start();
schreibenB.start();
lesenC.start();
pausieren(20000);
while(lesenC==Thread.currentThread());
lesenC.stop();
while(schreibenB==Thread.currentThread());
schreibenB.stop();
while(schreibenA==Thread.currentThread());
schreibenA.stop();
}
}
Code 0-4: Hauptprogramm.java in Projekt 001_unkontrolliert
|
C liest nun arrA aus: 000000000111111110000000011111 C liest nun arrB aus: 000011111111000000001111111100 C liest nun arrA aus: 111110000000011111111000000001 C liest nun arrB aus: 000000001111111100000000111111 C liest nun arrA aus: 011111111000000001111111100000 C liest nun arrB aus: 111100000000111111110000000011
Code 0-5: Konsolenausgabe
|
|
public class SchreibenA extends Thread
{
public boolean einser = false;
public void run()
{
while(true)
{
if(Hauptprogramm.CliestA==false)
{
Hauptprogramm.Aschreibt=true;
for(int i=0;i<30;i++)
{
if(einser)
Hauptprogramm.arrA[i]=1;
else
Hauptprogramm.arrA[i]=0;
Hauptprogramm.pausieren(20);
}
Hauptprogramm.Aschreibt=false;
einser = !einser;
}
//Erledige andere Aufgaben:
Hauptprogramm.pausieren(50);
}
}
}
Code 0-6: SchreibenA.java in Projekt 002_kontrolliert
public class SchreibenB extends Thread
{
public boolean einser = false;
public void run()
{
while(true)
{
if(Hauptprogramm.CliestB==false)
{
Hauptprogramm.Bschreibt=true;
for(int i=0;i<30;i++)
{
if(einser)
Hauptprogramm.arrB[i]=1;
else
Hauptprogramm.arrB[i]=0;
Hauptprogramm.pausieren(20);
}
Hauptprogramm.Bschreibt=false;
einser = !einser;
}
//Erledige andere Aufgaben:
Hauptprogramm.pausieren(50);
}
}
}
Code 0-7: SchreibenB.java in Projekt 002_kontrolliert
public class LesenC extends Thread
{
public void run()
{
while(true)
{
if(Hauptprogramm.Aschreibt==false)
{
Hauptprogramm.CliestA=true;
System.out.println("C liest nun arrA aus:");
for(int i=0;i<30;i++)
{
System.out.print(Hauptprogramm.arrA[i]);
Hauptprogramm.pausieren(100);
}
System.out.println();
Hauptprogramm.CliestA=false;
}
if(Hauptprogramm.Bschreibt==false)
{
Hauptprogramm.CliestB=true;
System.out.println("C liest nun arrB aus:");
for(int i=0;i<30;i++)
{
System.out.print(Hauptprogramm.arrB[i]);
Hauptprogramm.pausieren(100);
}
System.out.println();
Hauptprogramm.CliestB=false;
}
//Erledige andere Aufgaben:
Hauptprogramm.pausieren(200);
}
}
}
Code 0-8: LesenC.java in Projekt 002_kontrolliert
public class Hauptprogramm
{
public static int[] arrA={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
public static int[] arrB={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
public static boolean Aschreibt = false;
public static boolean Bschreibt = false;
public static boolean CliestA = false;
public static boolean CliestB = false;
public static void pausieren(long ms)
{
try
{
Thread.sleep(ms);
}
catch(Exception e)
{
}
}
public static void main(String[] args)
{
SchreibenA schreibenA = new SchreibenA();
SchreibenB schreibenB = new SchreibenB();
LesenC lesenC = new LesenC();
schreibenA.start();
schreibenB.start();
lesenC.start();
pausieren(30000);
while(lesenC==Thread.currentThread());
lesenC.stop();
while(schreibenB==Thread.currentThread());
schreibenB.stop();
while(schreibenA==Thread.currentThread());
schreibenA.stop();
}
}
Code 0-9: Hauptprogramm.java in Projekt 001_unkontrolliert
C liest nun arrA aus: 111111111111111111111111111111 C liest nun arrB aus: 111111111111111111111111111111 C liest nun arrA aus: 000000000000000000000000000000 C liest nun arrB aus: 000000000000000000000000000000
Code 0-10: Konsolenausgabe
|