Я имею проблему, чтобы понять следующую программу в главе 9 (нитей) из SCJP книги K & BSCJP Thread Глава вопрос
ВОПРОС:
class Dudes{
static long flag = 0;
// insert code here
void chat(long id){
if(flag == 0)
flag = id;
for(int x = 1; x < 3; x++){
if(flag == id)
System.out.print("yo ");
else
System.out.print("dude ");
}
}
}
public class DudesChat implements Runnable{
static Dudes d;
public static void main(String[] args){
new DudesChat().go();
}
void go(){
d = new Dudes();
new Thread(new DudesChat()).start();
new Thread(new DudesChat()).start();
}
public void run(){
d.chat(Thread.currentThread().getId());
}
}
И учитывая эти два фрагмента:
I. synchronized void chat (long id){
II. void chat(long id){
ВАРИАНТЫ:
When fragment I or fragment II is inserted at line 5, which are true? (Choose all that apply.)
A. An exception is thrown at runtime
B. With fragment I, compilation fails
C. With fragment II, compilation fails
D. With fragment I, the ouput could be yo dude dude yo
E. With fragment I, the output could be dude dude yo yo
F. With fragment II, the output could be yo dude dude yo
Официальный Ответ F (Но я не могу понять, почему, было бы очень признателен, если кто-то может объяснить мне концепцию)
Спасибо большое :) –
но чат синхронизирован. как поток 2 может обрабатываться, пока поток 1 не будет прерван? есть только один объект Dude (статический), поэтому 2 потока пытаются создать один объект – grep
, если синхронизированный выход чата будет: yo лет чувак чувак – grep