start suspend resume stop
package scjp;
import com.sun.corba.se.impl.ior.NewObjectKeyTemplateBase;
class MyThread implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
int i=0;
while (true) {
System.out.println(Thread.currentThread().getName() + " i " + i++);
}
}
}
public class DemoThreadResume{
Thread thread;
public DemoThreadResume(String name) {
// TODO Auto-generated constructor stub
thread=new Thread(new MyThread());
thread.setName(name);
}
public static void main(String[] args) {
DemoThreadResume demoThreadResume=new DemoThreadResume("Runnning Thread");
System.out.println("Starting ");
demoThreadResume.thread.start();
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
demoThreadResume.thread.suspend();
demoThreadResume.thread.resume();
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
demoThreadResume.thread.stop();
}
}
このcodeにはスレッドのこれらの方法の呼び出しが専門的にリストされている.まずstart、それからsuspended、それからresum、それからstop.
このコードをデバッグするときに問題が発生しました.
demoThreadResume.thread.suspend();
demoThreadResume.thread.resume();
システムを中に入れるout.println("Suspend ... ");
スレッドは実行せずにブロックされます.システムを見つけたout.printlnは同期の方法で、すでに歌の前のThreadが持っているので後ろに使われることができなくて、これもresumeの1つの特徴ではありませんか、掛けますが、依然として錠(ここではこのprintlnの方法の錠)を持っています.次にprintlnメソッドのソースコードを示す.
/**
* Prints a String and then terminate the line. This method behaves as
* though it invokes <code>{@link #print(String)}</code> and then
* <code>{@link #println()}</code>.
*
* @param x The <code>String</code> to be printed.
*/
public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}