Я написал три программы голодание, но ни один из них не бросает исключение, как:Простая программа Голодание, которая бросает исключение
"Thread-2" prio=1 tid=0x080db6c8 nid=0x22de waiting for monitor entry [0xa81e4000..0xa81e4150]
at yourClass.run(yourcCass.java:55)
- waiting to lock <0xa89fc7f0> (a java.lang.Object)
- locked <0xa89fcdb0> (a starvation)
at java.lang.Thread.run(Thread.java:595)
"Thread-1" prio=1 tid=0x080da780 nid=0x22dd waiting for monitor entry [0xa8264000..0xa82650d0]
at yourClass.run(yourClass.java:55)
- waiting to lock <0xa89fc7f0> (a java.lang.Object)
- locked <0xa89fcc48> (a starvation)
at java.lang.Thread.run(Thread.java:595)
"Thread-0" prio=1 tid=0x080d9100 nid=0x22db in Object.wait() [0xa8366000..0xa8366fd0]
at java.lang.Object.wait(Native Method)
- waiting on <0xa89fc978> (a starvation)
at starvation.run(yourClass.java:62)
- locked <0xa89fc7f0> (a java.lang.Object)
- locked <0xa89fc978> (a starvation)
at java.lang.Thread.run(Thread.java:595)
, который показывает, что ваша программа в голодании.
Может кто-нибудь помочь с простой программой голодания, которая выдает выше исключения.
С помощью при условии, что код, который я написал это:
public class ThreadStarvation implements Runnable{
boolean t1Entered = false;
public synchronized void synchronizedTimerMethod(){
System.out.println(Thread.currentThread().getName()+" enters synchronized block");
while (!t1Entered && !Thread.currentThread().getName().equals("t1")) {
try {
wait();
} catch (Exception e) {
}
}
t1Entered = true;
while (true) {
try{
Thread.sleep(5000);
}
catch (InterruptedException ie) {}
System.out.println(Thread.currentThread().getName()+" in synchronized block");
}
}
public void run(){
synchronizedTimerMethod();
}
public static void main(String[] args) {
ThreadStarvation ts1=new ThreadStarvation();
Thread t1=new Thread(ts1);
t1.setName("t1");
Thread t2=new Thread(ts1);
t2.setName("t2");
t2.start();
try{
Thread.sleep(2000);
}
catch (InterruptedException ie) {}
t1.start();
try{
Thread.sleep(16000);
}
catch (InterruptedException ie) {}
System.out.println(t1.getState());
System.out.println(t2.getState());
}
}
t2 будет голодной, то почему сообщение не дается JVM, что t2 в голодании или в ожидании входа монитора? Я разрешил свою программу работать в течение 20 минут.
Можете ли вы опубликовать фактический код? –
SO помогает тем, кто помогает себе ... что у вас есть до сих пор? – dcsohl
какое исключение вы ожидаете? Почему, по вашему мнению, голод относится к исключению? –