A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 不二晨 金牌黑马   /  2019-1-14 09:24  /  1027 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

线程休眠

public static void sleep(long millis)

public class ThreadSleep extends Thread {
    @Override
    public void run() {
        for (int x = 0; x < 100; x++) {
            System.out.println(getName() + ":" + x + ",日期:" + new Date());
            // 睡眠
            // 困了,我稍微休息1秒钟
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
线程加入

public final void join()
等待该线程终止。
也就是说,得等这个线程运行结束,别的线程才能运行

public class ThreadJoinDemo {
        public static void main(String[] args) {
                ThreadJoin tj1 = new ThreadJoin();
                ThreadJoin tj2 = new ThreadJoin();
                ThreadJoin tj3 = new ThreadJoin();

                tj1.setName("李渊");
                tj2.setName("李世民");
                tj3.setName("李元霸");

                tj1.start();
                try {
                        tj1.join();
                } catch (InterruptedException e) {
                        e.printStackTrace();
                }
               
                tj2.start();
                tj3.start();
        }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
线程礼让

public static void yield()
暂停当前正在执行的线程对象,并执行其他线程。

public class ThreadYield extends Thread {
        @Override
        public void run() {
                for (int x = 0; x < 100; x++) {
                        System.out.println(getName() + ":" + x);
                        Thread.yield();
                }
        }
}
1
2
3
4
5
6
7
8
9
守护线程

public final void setDaemon(boolean on)
将该线程标记为守护线程或用户线程。
当正在运行的线程都是守护线程时,Java 虚拟机退出。 该方法必须在启动线程前调用。
通俗易懂地说:守护线程是用来保护别的非守护线程的,如果其它非守护线程都停止了,守护线程自身也必须停止

(保护的人挂了,守护者也得挂,不过守护者得到消息再挂,所以受保护者挂了以后,守护者会继续执行几次再挂)

//这个代码中,刘备一运行完毕,张飞关羽跟着再运行几次,就停止
public class ThreadDaemonDemo {
    public static void main(String[] args) {
        ThreadDaemon td1 = new ThreadDaemon();
        ThreadDaemon td2 = new ThreadDaemon();

        td1.setName("关羽");
        td2.setName("张飞");

        // 设置守护线程
        td1.setDaemon(true);
        td2.setDaemon(true);

        td1.start();
        td2.start();

        Thread.currentThread().setName("刘备");
        for (int x = 0; x < 5; x++) {
            System.out.println(Thread.currentThread().getName() + ":" + x);
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
中断线程

public final void stop():让线程停止,过时了,但是还可以使用。
替代stop的:
public void interrupt():中断线程。 把线程的状态终止,并抛出一个InterruptedException。

public class ThreadStop extends Thread {
        @Override
        public void run() {
                System.out.println("开始执行:" + new Date());

                // 我要休息10秒钟,亲,不要打扰我哦
                try {
                        Thread.sleep(10000);
                } catch (InterruptedException e) {
                        // e.printStackTrace();
                        System.out.println("线程被终止了");
                }

                System.out.println("结束执行:" + new Date());
        }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class ThreadStopDemo {
    public static void main(String[] args) {
        ThreadStop ts = new ThreadStop();
        try {
            Thread.sleep(3000);
            // ts.stop();  //过了3秒后,关闭ThreadStop线程,
            ts.interrupt(); //中断线程。 把线程的状态终止,并抛出一个InterruptedException
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
---------------------
【转载,仅作分享,侵删】
作者:imxlw00
原文:https://blog.csdn.net/imxlw00/article/details/85331540


1 个回复

倒序浏览
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马