Java.lang.thread.run (Thread.java:745)JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Java.lang.thread.run (Thread.java:745)

Сообщение Anonymous »

Когда я использую предложение 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»