Когато стартирам този код, той показва следния изход:
One : 15
Two : 15
One : 14
Two : 14
Two : 13
One : 13
Two : 12
One : 12
One : 11
Two : 11
Thread 1 suspended
Two : 10
Two : 9
Two : 8
Two : 7
Two : 6
Thread 1 resumed
Thread 2 suspended
Thread 2 resumed
Резултатът не продължава до края, който е Едно:1 Две:1 Не е ли изпълнен методът myresume на класа NewThread1? Каква е причината за това?
Следва кодът на NewThread1:
class NewThread1 implements Runnable{
String name;
Thread t;
boolean suspendFlag;
NewThread1(String threadname){
name = threadname;
t = new Thread(this, name);
suspendFlag = false;
t.start();
}
@Override
public void run(){
try{
for(int i=15; i>0; i--){
System.out.println(name+ " : " +i);
Thread.sleep(200);
synchronized(this){
while(suspendFlag){
wait();
}
}
}
}catch(InterruptedException e){
System.out.println("New thread1 Interrupted");
}
}
synchronized void myresume(){
suspendFlag = false;
}
void mysuspend(){
suspendFlag = true;
}
}
Следва кодът на NewThread1: (методът main() е дефиниран тук)
public class Suspend_ResumeThreads {
public static void main(String args[]){
NewThread1 ob1 = new NewThread1("One ");
NewThread1 ob2 = new NewThread1("Two ");
try{
Thread.sleep(1000);
ob1.mysuspend();
System.out.println("Thread 1 suspended");
Thread.sleep(1000);
ob1.myresume();
System.out.println("Thread 1 resumed");
ob2.mysuspend();
System.out.println("Thread 2 suspended");
Thread.sleep(1000);
ob2.myresume();
System.out.println("Thread 2 resumed");
}catch(InterruptedException e){
System.out.println("Main Interrupted");
}
try{
ob1.t.join();
ob2.t.join();
}catch(InterruptedException e){
System.out.println("Main interrupeted in join()");
}
System.out.println("Main exiting..");
}
}
.notify()
на същия обект, за да събудите нишка, заседнала в.wait()
към този обект. - person Giulio Franco   schedule 23.12.2014suspendFlag
като непостоянен. Или го променете в разделsynchronized
- person talex   schedule 23.12.2014