线程:suspend和resume方法

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

对于一般线程类:

例如:

public class MyThread extends Thread{

……

public void run(){

……

}

}

public class Run{

扫描二维码关注公众号,回复: 9240745 查看本文章

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

猜你喜欢

转载自www.cnblogs.com/perfumeBear/p/12326236.html