Başka bir garson iş parçacığı, notify
numaralı çağrıyı beklerken o blokta bekleyen bir garson iş parçacığı beklediğinde, eşitlenmiş bloğu nasıl girebilir?Java'da Konu Başlıkları ve Çoklu İş Parçacığı
parçacığı biri senkronize bloğunda ve yeni iplik eskisinin sonra senkronize blok hakkına girdiğinde senkronize blok girmek için beklemek gibi görünüyor blok bırakır:
class ThreadClassNotifier implements Runnable {
private Message msg;
public ThreadClassNotifier(Message msg) {
this.msg = msg;
}
@Override
public void run() {
String name = Thread.currentThread().getName();
System.out.println(name+" started");
try {
Thread.sleep(1000);
synchronized (msg) {
msg.setMsg(name+" Notifier work done");
msg.notify();
// msg.notifyAll();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class ThreadClassWaiter implements Runnable {
private Message msg;
public ThreadClassWaiter(Message m){
this.msg=m;
}
@Override
public void run() {
String name = Thread.currentThread().getName();
synchronized (msg) {
try{
System.out.println(name+" waiting to get notified at time:"+System.currentTimeMillis());
Thread.sleep(10000);
msg.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(name+" waiter thread got notified at time:"+System.currentTimeMillis());
//process the message now
System.out.println(name+" processed: "+msg.getMsg());
}
}
}
public class ThreadMain {
public static void main(String[] args) throws InterruptedException {
Message msg = new Message("process it");
ThreadClassWaiter waiter = new ThreadClassWaiter(msg);
new Thread(waiter,"waiter").start();
ThreadClassWaiter waiter1 = new ThreadClassWaiter(msg);
new Thread(waiter1, "waiter1").start();
System.out.println("All the threads are started");
}
}