Когда я использую предложение Cycle для запуска двух потоков, это показывает мне эту проблему: java.lang.thread.run (thread.java:745)
Но я выясняю, используя два метода: \
Во -первых, если я не запускаю приложение, просто отлаживает его и использую точку останова, все будет в порядке.
Second на основе моей демонстрации только имеет две потоки, поэтому я мог скопировать эту часть кода "< /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>
Для дважды это также было бы в порядке. < /p>
Все мой демонстрационный код ниже: < /p>
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>
и правильный результат должен быть похож на ниже:
Thread-1 имеет данные: -1188249922
Thread-0 имеет данные: 1024718434 a из потока-0 Получить данные: 1024718434
b из потока-0 Получить данные: 1024718434
a из потока 1 Получить данные: -1188249922
b Из потока 1 Получить данные : -1188249922 < /p>
Но ошибка ниже: Thread-1 поместил данные: -807205084
Thread-0. Разместило данные: -976943511
A от Thread-0 Получить данные: -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>
Насколько я знаю, Thread-1 полностью изменится и убьет поток-0, так что это может показаться NullpointerException. но я не уверен.
Подробнее здесь: https://stackoverflow.com/questions/391 ... ad-java745
Java.lang.thread.run (Thread.java:745) ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Java.lang.IllegalAccessException: java.lang.Class
недоступен из java.lang.Class
Anonymous » » в форуме Android - 0 Ответы
- 134 Просмотры
-
Последнее сообщение Anonymous
-