Wenn ich den Zyklus -Satz verwende, um zwei Threads auszuführen, wird mir dieses Problem angezeigt: java.lang.thread.run (Thread.java:745)
Aber ich finde es heraus, zwei Methoden zu verwenden: \
Wenn ich die Anwendung nicht ausführe, debuggen Sie sie einfach und verwenden Sie den Haltepunkt, es wäre in Ordnung.
Zweitens, basierend auf meiner Demo, hat nur zwei Threads, sodass ich diesen Teil des Codes kopieren kann. "< /p>
new Thread(new Runnable() {
@Override
public void run() {
int data = new Random().nextInt();
System.out.println(Thread.currentThread().getName()
+ " has put data:" + data);
threadDataMap.put(Thread.currentThread(), data);
new A().get();
new B().get();
}
}).start();
"
< /code>
Für zweimal wäre es auch in Ordnung. Br />
package 多线程;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class ThreadScopShareData {
private static int data = 0;
private static Map threadDataMap=new HashMap();
public static void main(String[] args) {
for (int i = 0; i < 2; i++) {
new Thread(new Runnable() {
@Override
public void run() {
int data = new Random().nextInt();
System.out.println(Thread.currentThread().getName()
+ " has put data:" + data);
threadDataMap.put(Thread.currentThread(), data);
new A().get();
new B().get();
}
}).start();
}
}
static class A {
public void get() {
int data=threadDataMap.get(Thread.currentThread());
System.out.println("A from " + Thread.currentThread().getName()
+ "get data:" + data);
}
}
static class B {
public void get() {
int data=threadDataMap.get(Thread.currentThread());
System.out.println("B from " + Thread.currentThread().getName()
+ "get data:" + data);
}
}
}
< /code>
und das richtige Ergebnis sollte wie unten sein:
Thread-1 hat Daten gefügt: -1188249922
Thread-0 hat Daten gefügt: 1024718434 < Br /> A aus Thread-0 Daten erhalten: 1024718434
b aus Thread-0 Erhalten Sie Daten: 1024718434
A von Thread-1 Daten erhalten: -1188249922
B From Thread-1 : -1188249922 < /p>
Aber der Fehler ist unten: Thread-1 hat Daten gefügt: -807205084
Thread-0 hat Daten gefügt: -976943511
A aus Thread-0 Daten erhalten: -976943511 < /p>
Exception in thread "Thread-1" B from Thread-0 get data :-976943511
java.lang.NullPointerException
at 多线程.ThreadScopeShareData$A.get(ThreadScopeShareData.java:33)
at 多线程.ThreadScopeShareData$1.run(ThreadScopeShareData.java:22)
at java.lang.Thread.run(Thread.java:745)
< /code>
Soweit ich weiß, würde der Thread-1 den Thread-0 vollständig ändern und abtöten, sodass es eine Nullpointerexception erscheint. Aber ich bin mir nicht sicher.
Java.lang.thread.run (thread.java:745) ⇐ Java
-
- Similar Topics
- Replies
- Views
- Last post