Я знаю, что это немного наивный вопрос, но я хочу понять основной принцип работы многопоточности в java. Рассмотрим следующий код и скажем, что A выполняется в основном потоке и запускает выполнение другого рабочего потока, определенного в классе B. Я хочу знать, что B.func1 вызывается из A и запускает метод B, выполняется параллельно или нет ?Вызов метода класса, который расширяет Thread, из другого класса
public class A {
public static void main(String[] args) {
B obj = new B();
obj.start();
obj.func1();
}
}
public class B extends Thread {
public B() {
//constructor
}
public void run() {
while(true) {
//do somethings
}
}
public void func1() {
//do someotherthings
}
}
@HovercraftFullOfEels общие поля должны быть должным образом синхронизированы, для некоторых случаев их волатильность будет достаточной, но для других случаев это может быть связано с другими механизмами синхронизации. – bowmore
@HovercraftFullOfEels, IMO, вы будете приводить в движение без изменений, сообщая им синхронизировать _methods_. Единственная цель синхронизации - защитить _data_. Часто мы говорим о необходимости синхронизации метода, когда мы действительно имеем в виду, нам нужно синхронизировать некоторый бит данных, который является _exclusive_ доступным методом. Но чаще всего к одним и тем же данным можно обращаться несколькими способами. Noobs должны узнать, что 'synchronized' не работает, если только один бит кода, который обращается к общим данным,« синхронизирован »на _same object_. –
@jameslarge: вы правы. Комментарий удален, и спасибо за разъяснение/исправление. –