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多线程编程核心技术》 高洪岩