7、暂停线程 suspend() resume()

版权声明:版权归 爱装逼的文艺小青年所有 https://blog.csdn.net/toyota_rav4/article/details/84843112

目录

 

 

suspend()可以暂停线程;resume()可以恢复线程;

suspend()缺点:独占

suspend()缺点:不同步

suspend()可以暂停线程;resume()可以恢复线程;

package com.demo3;

public class MyThread extends Thread {

    private int num = 0;

    public int getNum() {
        return num;
    }

    @Override
    public void run() {
        while (true) {
            num++;
        }
    }
}
package com.demo3;

public class Run {
    public static void main(String[] args) {
        try {
            MyThread myThread = new MyThread();
            myThread.start();

            Thread.sleep(100);
            System.out.println(myThread.getNum());

            Thread.sleep(100);
            myThread.suspend();
            System.out.println(myThread.getNum());

            Thread.sleep(100);
            System.out.println(myThread.getNum());

            myThread.resume();

            Thread.sleep(100);
            System.out.println(myThread.getNum());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

运行结果:

12480242
36655774
36655774
65261619

分析:从结果可以看出,suspend可以让线程暂停,而resume可以让线程运行。

suspend()缺点:独占

package com.demo4;

public class MyObject {
    synchronized public void printString(){
        System.out.println("begin");
        if (Thread.currentThread().getName().equals("a")) {
            System.out.println("a线程被suspend了!");
            Thread.currentThread().suspend();
        }
        System.out.println("end");
    }
}
package com.demo4;


public class ThreadA extends Thread {
    private MyObject myObject;

    public ThreadA(MyObject myObject) {
        this.myObject = myObject;
    }

    @Override
    public void run() {
        myObject.printString();
    }
}
package com.demo4;

public class ThreadB extends Thread {
    private MyObject myObject;

    public ThreadB(MyObject myObject) {
        this.myObject = myObject;
    }

    @Override
    public void run() {
        myObject.printString();
    }
}
package com.demo4;

public class Run {
    public static void main(String[] args) {
        MyObject myObject = new MyObject();
        ThreadA threadA = new ThreadA(myObject);
        threadA.setName("a");
        ThreadB threadB = new ThreadB(myObject);
        threadB.setName("b");
        threadA.start();
        threadB.start();
    }
}

运行结果:

begin
a线程被suspend了!

分析:suspend()导致a线程独占同步资源,线程b始终无法占有资源(调用printString())。

suspend()缺点:不同步

package com.demo5;

public class MyObject {
    private String username = "1";
    private String password = "11";
    public void setUsernamePassword(String username , String password) {
        this.username = username;
        if (Thread.currentThread().getName().equals("a")) {
            System.out.println("停止a线程");
            Thread.currentThread().suspend();
        }
        this.password = password;
    }
    public void printString(){
        System.out.println("username= " + username + "\n" + "password=" + password);
    }
}
package com.demo5;

public class ThreadA extends Thread {
    private MyObject myObject;

    public ThreadA(MyObject myObject) {
        this.myObject = myObject;
    }

    @Override
    public void run(){
        myObject.setUsernamePassword("a","aa");
    }
}
package com.demo5;

public class ThreadB extends Thread {
    private MyObject myObject;

    public ThreadB(MyObject myObject) {
        this.myObject = myObject;
    }

    @Override
    public void run() {
        myObject.printString();
    }
}
package com.demo5;

public class Run {
    public static void main(String[] args) {
        try {
            MyObject myObject = new MyObject();
            ThreadA threadA = new ThreadA(myObject);
            ThreadB threadB = new ThreadB(myObject);
            threadA.setName("a");
            threadB.setName("b");
            threadA.start();
            Thread.sleep(1000);
            threadB.start();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
}

运行结果:

停止a线程
username= a
password=11

猜你喜欢

转载自blog.csdn.net/toyota_rav4/article/details/84843112