Also ich habe einen Thread, der das kleinste Zeichen in einem Array von Zeichen durch ein anderes, zufälliges Zeichen ersetzt. Der Thread wird ausgeführt, bis das Array nur aus 'z' besteht. Aber wenn ich mehrere Threads erzeuge, bekomme ich seltsame Ausgaben und ich frage mich, ob es das einzige Problem beim Drucken ist oder ob mein Code tatsächlich inkodiert ist.Ändern eines Arrays aus mehreren Threads
run()
Methode in meinem Thread:
public void run() {
char[] expected = { 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z' };
while (timesModified < 100 && !Arrays.equals(array, expected)) {
try {
array[findMinIndex(array)] = rndChar();
timesModified++;
Thread.sleep(2000);
for (char c : array) {
System.out.print(c + " ");
}
System.out.println();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Mein Haupt:
public static void main(String[] args) {
char[] sa_table = new char[10];
Arrays.fill(sa_table, 'a');
Thread t = new Thread(new AddToTable(sa_table));
Thread t1 = new Thread(new AddToTable(sa_table));
Thread t2 = new Thread(new AddToTable(sa_table));
t.start();
t1.start();
t2.start();
try {
t.join();
t1.join();
t2.join();
} catch (Exception e) {
System.out.println("Interrupted");
}
}
Ausgabe von der Konsole:
n n n a a a a a a a a a a a a a a a a a a a a a
a a a a a a
n u U a n u U a a a a a a a
a a a a a a
n u N a a a a a a a
n n u o a a a a a a a
u o K a a a a a a
n u o i a a a a a a
n u o i A a a a a a
n u o i A a a a a a
n u o i G a a a a a
n u o i K a a a a a
n u o i u a a a a a
n u o i u s a a a a
n u o i u s x a a a
n n n u o i u s u o i u s x l a a
u o i u s x l D a
x l h a
n u o i u s x l h H
n u o i u s x l h D
n u o i u s x l h a
n u o i u s x l h r
n u o i u s x l R r
n u o i u s x l v r
n u o C u s x l v r
n u o b u s x l v r
n n u o S u s x l v r
u o D u s x l v r
n u o T u s x l v r
n u o l u s x l v r
n u o M u s x l v r
n u o M u s x l v r
n u o t u s x l v r
n u o t u s x m v r
n u o t u s x J v r
n u o t u s x R v r
n u o t u s x i v r
n u o t u s x t v r
F u o t u s x t v r
A u o t u s x t v r
D u o t u s x t v r
l u o t u s x t v r
e u o t u s x t v r
L u o t u s x t v r
L u o t u s x t v r
o u o t u s x t v r
m u o t u s x t v r
s u o t u s x t v r
s u C t u s x t v r
s u D t u s x t v r
s u q t u s x t v r
s u W t u s x t v r
s u Y t u s x t v r
s u C t u s x t v r
s u s t u s x t v r
s u s t u s x t v h
s u s t u s x t v D
s u s t u s x t v w
I u s t u s x t v w
c u s t u s x t v w
g u s t u s x t v w
b u s t u s x t v w
N u s t u s x t v w
O u s t u s x t v w
u u s t u s x t v w
u u E t u s x t v w
u u u u C t u s x t v w
u T u T t u s x t v w
t u s x t v w
u u u X t u s x t v w u X t u s x t v w
u u D t u s x t v w
u u u T t u s x t v w
u u X t u s x t v w
u e t u s x t v w
u u f t u s x t v w
u u C t u s x t v w
u u u t u s x t v w
u u u t u o x t v w
u u u t u i x t v w
u u u t u P x t v w
u u u t u v x t v w
u u u b u v x t v w
u u u u u u K u v x t v w
u u u x u v x t v w
x u v x K v w
u u u x u v x W v w
u u u x u v x c v w
u u u u u x u v x e v w
u u u u x u v x n v w
u u u x u v x q v w
x u v x T v w
u u u x u v x w v w
z u u x u v x w v w
z P u x u v x w v w
z T u x u v x w v w
z z b u x u v x w v w b u x u v x w v w
z p u x u v x z p u x u v x w v w
w v w
Wie Sie sehen können, oft die Ausgabe unterschiedliche Länge hat und Ich bin mir nicht sicher, was es verursacht
werden kann, weil der Druck von verschiedenen Threads ist die Verschachtelung. Versuchen Sie, 'Arrays.toString (array)' zu verwenden, um zu drucken und zu sehen, was passiert. – OldCurmudgeon
Es hat geholfen.Vielen Dank – gryfon1997