📄 suspend.java
字号:
//挂起、开启、停止一个线程
class MyThread implements Runnable{
Thread thrd;
volatile boolean suspended; //为真时线程挂起
volatile boolean stopped; //为真时线程停止
MyThread(String name){
thrd = new Thread(this,name);
suspended = false;
stopped = false;
thrd.start();
}
//线程进入点
public void run(){
System.out.println(thrd.getName()+" 开始。");
try{
for(int i=1; i<1000;i++){
System.out.print(i+" ");
if((i%10)==0){
System.out.println();
Thread.sleep(250);
}
//用同步块检查suspended stopped.
synchronized(this){
while(suspended){
wait();
}
if(stopped) break;
}
}
}catch(InterruptedException e){
System.out.println(thrd.getName()+" 被打断。");
}
System.out.println(thrd.getName()+" 退出。");
}
//停止线程
synchronized void myStop(){
stopped = true;
//接着让一个挂起的线程停止。
suspended = false;
notify();
}
synchronized void mySuspended(){
suspended = true;
}
//开启线程
synchronized void myResuse(){
suspended = false;
notify();
}
}
public class Suspend {
public static void main(String args[]){
MyThread ob1 = new MyThread("我的线程");
try{
Thread.sleep(1000);
ob1.mySuspended();
System.out.println("挂起线程");
Thread.sleep(1000);
ob1.myResuse();
System.out.println("开启线程");
Thread.sleep(1000);
ob1.mySuspended();
System.out.println("挂起线程");
Thread.sleep(1000);
ob1.myResuse();
System.out.println("开启线程");
Thread.sleep(1000);
ob1.mySuspended();
System.out.println("停止线程");
ob1.myStop();
}catch(InterruptedException e){
System.out.println("主线程被打断。");
}
//等待线程结束
try{
ob1.thrd.join();
}catch(InterruptedException e){
System.out.println("主线程被打断。");
}
System.out.println("主线程结束。");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -