线程的几个有意思的方法

 1.join()方法

字面意思就是:让某个线程join(参加、加入)进来。

即让加入的那个线程运行,而当前正在运行的线程(调用的线程)阻塞,直到加入的线程运行完成。

一句话:谁join进来就执行谁。

没有使用join时的情况:

package ThreadDemo;

public class FirstThread extends Thread {

    private int i;

    @Override
    public void run() {
        // TODO Auto-generated method stub
        for (; i < 20; i++) {
            System.out.println(this.getName() + " " + i);
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        for (int i = 0; i < 20; i++) {

            System.out.println(Thread.currentThread().getName()+" "+i);
            
            if(i == 5){
                FirstThread first = new FirstThread();
                first.start();
            }
        }
    }

}
输出:

main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 10
Thread-0 0
main 11
Thread-0 1
main 12
Thread-0 2
main 13
Thread-0 3
main 14
Thread-0 4
main 15
Thread-0 5
main 16
main 17
Thread-0 6
main 18
Thread-0 7
main 19
Thread-0 8
Thread-0 9
Thread-0 10
Thread-0 11
Thread-0 12
Thread-0 13
Thread-0 14
Thread-0 15
Thread-0 16
Thread-0 17
Thread-0 18
Thread-0 19

使用join后的情况:

package ThreadDemo;

public class FirstThread extends Thread {

    private int i;

    @Override
    public void run() {
        // TODO Auto-generated method stub
        for (; i < 20; i++) {
            System.out.println(this.getName() + " " + i);
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        for (int i = 0; i < 20; i++) {

            System.out.println(Thread.currentThread().getName()+" "+i);
            
            if(i == 5){
                FirstThread first = new FirstThread();
                first.start();
                try {
                    first.join();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

}
输出:

main 0
main 1
main 2
main 3
main 4
main 5
Thread-0 0
Thread-0 1
Thread-0 2
Thread-0 3
Thread-0 4
Thread-0 5
Thread-0 6
Thread-0 7
Thread-0 8
Thread-0 9
Thread-0 10
Thread-0 11
Thread-0 12
Thread-0 13
Thread-0 14
Thread-0 15
Thread-0 16
Thread-0 17
Thread-0 18
Thread-0 19
main 6
main 7
main 8
main 9
main 10
main 11
main 12
main 13
main 14
main 15
main 16
main 17
main 18
main 19  


2.sleep()方法

字面意思:让线程睡眠,即暂停不执行。

让当前正在执行的线程暂停一段时间,并进入阻塞状态。

在睡眠时间内,即使有CPU可以使用,也不会执行。

try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}


3. yield()方法

字面意思:让当前线程放弃执行。

让当前正在执行的线程暂停,但它不会阻塞该线程,只是将该线程转入就绪状态。
系统的线程调度器重新调度一次,有可能线程调度器重新调度该线程。
只有优先级与当前线程相同或是更高的处于就绪状态的线程才会获得执行机会。

4.setDeamon ()方法
设置为后台线程(守护线程)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值