suspend()和resume()方法可用于暂停、恢复线程,但已经弃用,原因是suspeng()会造成线程的阻塞。独占锁,造成数据不同步。

对于一般线程类:

例如:

public class MyThread extends Thread{
……
public void run(){
……
}
}
 
public class Run{
MyThread t= new MyThread();
……
t.suspend();//线程run中代码会暂停执行,直到resume
……
t.resume();
 
}

对于同步方法中使用suspend,会造成锁无法释放。

例如

synchronized public void printString(){
……
Thread.currentThread.suspend();
……
}

 

首先进来的线程A,会永远不会释放锁,其他线程没有机会执行。

 

导致数据不同步示例:

package threadTest6;
 
public class MyObject {
    private String username="1";
    private String password="11";
    public void setValue(String u,String p){
       this.username=u;
       if(Thread.currentThread().getName().equals("a")){
           System.out.println("停止a线程!");
           Thread.currentThread().suspend();
       }
       this.password=p;
    }
    public void printUsernamePassword(){
       System.out.println(username+"  "+password);
    }
}
 
package threadTest6;
 
public class Run {
    public static void main(String[] args){
       try{
           final MyObject myobject = new MyObject();
           Thread thread1=new Thread(){
              public void run(){
                  myobject.setValue("a", "aa");
              };
           };
           thread1.setName("a");
           thread1.start();
           Thread.sleep(500);
           Thread thread2=new Thread(){
              public void run(){
                  myobject.printUsernamePassword();
              };
           };
           thread2.start();
          
       }catch(InterruptedException e){
           e.printStackTrace();
       }
    }
 
}

结果:

停止a线程!

a  11

 

参考:《Java多线程编程核心技术》 高洪岩