线程控制

线程休眠
public static void sleep(long millis)
线程加入
public final void join()
线程礼让
public static void yield()
后台线程
public final void setDaemon(boolean on)
中断线程
public final void stop()
public void interrupt()

线程休眠

package com.shujia.day19;

/*
    public static void sleep(long millis)
    线程控制:休眠线程
    当线程处于休眠状态的时候,该线程就没有cpu执行权了,若这时还有其他的线程,会被抢走cpu执行权。
    在哪个方法中调用,就是调用该方法的线程对象进行休眠
 */

class SleepThread extends Thread {
    @Override
    public void run() {
        System.out.println(getName() + " 睡着了。。。。");
        try {
            Thread.sleep(5000); // 在哪个方法中调用,就是调用该方法的线程对象进行休眠
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(getName()+" 睡醒了。。。。");

    }
}

public class ThreadSleepDemo1 {
    public static void main(String[] args) {
        SleepThread t1 = new SleepThread();
        t1.setName("魏一民");
        t1.start();


    }
}

线程加入

/*
public static void sleep(long millis)
如果线程对象被加入线程后,其他线程等待该线程执行结束,其他线程之间会进行抢占式执行

*/
package com.shujia.day19;


class JoinThread extends Thread {
    @Override
    public void run() {
        for (int i = 1; i <= 10; i++) {
            System.out.println(getName() + " - " + i);
        }
    }
}


public class ThreadJoinDemo1 {
    public static void main(String[] args) {
        JoinThread t1 = new JoinThread();
        JoinThread t2 = new JoinThread();
        JoinThread t3 = new JoinThread();

        t1.setName("小魏");
        t2.setName("小徐");
        t3.setName("小陈");

        t1.start();
        try {
            t1.join(); // 其他线程等待该线程执行结束,其他线程之间会进行抢占式执行
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        t2.start();
        t3.start();
    }
}

线程礼让


/*
    礼让线程public static void yield()
        yield()只是为了运行结果看起来均匀一些
 */
class YieldThread extends Thread{
    @Override
    public void run() {
        for(int i=1;i<200;i++){
            System.out.println(getName()+" - "+i);
            Thread.yield();
        }
    }
}

public class ThreadYieldDemo1 {
    public static void main(String[] args) {
        YieldThread t1 = new YieldThread();
        YieldThread t2 = new YieldThread();
        t1.setName("民哥");
        t2.setName("原神哥");

        t1.start();
        t2.start();
    }
}

后台线程

package com.shujia.day19;

/*
    后台线程:public final void setDaemon(boolean on)
        用户线程
        守护线程
    在启动之前,设置一下,若一个进程中没有用户线程,守护线程也没有必要存在。
    用户线程结束,守护线程随之结束
 */
class DaemonThread extends Thread {
    @Override
    public void run() {
        for (int i = 1; i <= 200; i++) {
            System.out.println(getName() + " - " + i);
        }
    }
}

public class ThreadDaemonDemo1 {
    public static void main(String[] args) {
        DaemonThread t1 = new DaemonThread();
        DaemonThread t2 = new DaemonThread();
        DaemonThread t3 = new DaemonThread();

        t1.setName("刘备");
        t2.setName("关羽");
        t3.setName("张飞");
        t2.setDaemon(true);
        t3.setDaemon(true);

        t1.start();
        t2.start();
        t3.start();
    }
}

中断线程

package com.shujia.day19;

/*
     中断线程:将休眠的线程打断
     public final void stop()    直接将线程对象打死,后面的语句不会执行
     public void interrupt()     将休眠的线程打断,继续执行后续操作

 */

class StopThread extends Thread {
    @Override
    public void run() {
        System.out.println(getName() + " 睡着了。。。。");
        try {
            Thread.sleep(5000); // 在哪个方法中调用,就是调用该方法的线程对象进行休眠
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(getName()+" 睡醒了。。。。");
    }
}

public class ThreadStopDemo1 {
    public static void main(String[] args) {
        StopThread t1 = new StopThread();
        t1.setName("民哥");
        t1.start();
        try {
            Thread.sleep(2000);
//            t1.stop();
            t1.interrupt();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
}
posted @ 2024-08-19 20:56  ていせい  阅读(3)  评论(0编辑  收藏  举报