(Only OCP)
public class TwoThreads {
static Thread laurel, hardy;
public static void main(String[] args) {
laurel = new Thread() {
public void run() {
System.out.println("A");
try {
hardy.sleep(1000);
} catch (Exception e) {
System.out.println("B");
}
System.out.println("C");
}
};
public void run() {
System.out.println("A");
try {
hardy.sleep(1000);
} catch (Exception e) {
System.out.println("B");
}
System.out.println("C");
}
};
hardy = new Thread() {
public void run() {
System.out.println("D");
try {
laurel.wait();
} catch (Exception e) {
System.out.println("E");
}
System.out.println("F");
}
};
public void run() {
System.out.println("D");
try {
laurel.wait();
} catch (Exception e) {
System.out.println("E");
}
System.out.println("F");
}
};
laurel.start();
hardy.start();
}
}
Explain by Azimli Javid
Bizdən istənilir ki, print olunan hərfləri tapaq.Burda vacib deyil hansı thread hansından bir az tez ya gec icra olunacaq.Əsas nəticələrdi, ardıclıllıq yox...Deməli 2 thread ə start verilir, laurel və hardy.laurel thread-də normaldı hər şey.sleep(long ms) methodu staticdi və cari icra olunan thread i yuxuya verir müəyyən zamanlıq(Thread.sleep(long ms) bu cür də yazıla bilər).Static method olduğu üçün hardy instance variable burda rol oynamır.(OOP hissədən izah etməyəcəm, çünki OCP-də advanced mövzuların öhdəsindən gəlmək üçün artıq OOP biliyi yaxşı olmalıdı.).laurel thread-i A və C print edir.İnteruptedException yaranmadığı üçün normal icra olunur.hardy thread-ə gəldikdə isə vəziyyət dəyişir.Burda D-ni print edir.Sonra isə gəlir laurel.wait() sətrinə(Bu method thread lər arasında synchronization olan zaman onların qarşılıqlı əlaqəsi üçündür.Object class-ından varis alınır.wait()/notify birgə işlənir).wait() və notify/notifyAll() methodları mütləq syncronized olunmuş object üzərində çağrılmalıdır.Syncronized olunmuş object üzərində çağrılmadığı üçün İllegalMonitorStateException verir və ötürülür catch blokuna E print olunur.Ardınca F print olunur.
Cavab: ACDEF
hardy.start();
}
}
Explain by Azimli Javid
Bizdən istənilir ki, print olunan hərfləri tapaq.Burda vacib deyil hansı thread hansından bir az tez ya gec icra olunacaq.Əsas nəticələrdi, ardıclıllıq yox...Deməli 2 thread ə start verilir, laurel və hardy.laurel thread-də normaldı hər şey.sleep(long ms) methodu staticdi və cari icra olunan thread i yuxuya verir müəyyən zamanlıq(Thread.sleep(long ms) bu cür də yazıla bilər).Static method olduğu üçün hardy instance variable burda rol oynamır.(OOP hissədən izah etməyəcəm, çünki OCP-də advanced mövzuların öhdəsindən gəlmək üçün artıq OOP biliyi yaxşı olmalıdı.).laurel thread-i A və C print edir.İnteruptedException yaranmadığı üçün normal icra olunur.hardy thread-ə gəldikdə isə vəziyyət dəyişir.Burda D-ni print edir.Sonra isə gəlir laurel.wait() sətrinə(Bu method thread lər arasında synchronization olan zaman onların qarşılıqlı əlaqəsi üçündür.Object class-ından varis alınır.wait()/notify birgə işlənir).wait() və notify/notifyAll() methodları mütləq syncronized olunmuş object üzərində çağrılmalıdır.Syncronized olunmuş object üzərində çağrılmadığı üçün İllegalMonitorStateException verir və ötürülür catch blokuna E print olunur.Ardınca F print olunur.
Cavab: ACDEF
Comments
Post a Comment