2010-07-08 2 views
1

Я просто играю с нитками в java. У меня есть класс, который реализует runnable.Вопрос по темам

public class MyThread implements Runnable{ 

    private boolean finished; 
    //Other variables 

    public void run(){ 
     //Thread code 
    } 
} 

Я понимаю, что каждая нить типа MyThread будет иметь свою собственную копию переменных-членов и записывает эти переменные-члены не должны быть синхронизированы. Правильно ли это предположение? Если правильный, доступ к тому, что нужно синхронизировать? Может кто-то ухаживать за контуром или псевдокодом? Благодарю.

ответ

6

Не обязательно. Вы можете создать несколько потоков, используя тот же экземпляр MyThread. Например:

MyThread x = new MyThread(); 
new Thread(x).start(); 
new Thread(x).start(); 
new Thread(x).start(); 

Теперь на одном и том же объекте будет выполняться три потока всех запущенных кодов.

Я предлагаю вам переименовать MyThread, так как это не нить - это задача для потока для выполнения. Это делает его более ясным (ИМО).

+0

В этом случае выполните все три потока (хост x), см. * То же * законченное поле, поэтому, если «закончено» изменено в одном потоке, выполните две другие темы. Или это пример, когда ключевое слово 'volatile' изменило бы поведение? –

+0

@Andreas_D: Все они будут использовать одно и то же поле, но без изменчивого модификатора они могут не видеть изменений друг друга. –

+0

Принято. Но означает ли это, что если потоки работают в разных экземплярах, ничего не нужно синхронизировать? Или что именно делится между потоками, работающими на разных экземплярах того же типа? – user378101

0
  • Каждый экземпляр MyThread представляет собой новый экземпляр, как обычные классы и объекты.
  • Переменные родных типов копируются. Это означает, что изменение переменной в одном потоке ничего не делает для другого потока. Их не нужно синхронизировать.
  • Для объектов их ссылки копируются. Это означает, что два потока могут иметь ссылку на один и тот же объект. Если два потока одновременно манипулируют этим объектом, это может испортиться. Следовательно, эти обращения должны быть синхронизированы.
0

Показатель Really Big Index на concurrency стоит прочитать (да, он имеет примеры).

Смежные вопросы