前往顾页
以后地位: 主页 > 收集编程 > Jsp实例教程 >

Java中run(), start(), join(), wait(), yield(), sleep()的利用

时候:2014-03-26 00:07来源:知行网www.zhixing123.cn 编辑:麦田守望者

run(), start(), join(), yield(), sleep()
这些是多线程中常常利用到的体例.

run(): 每个Thread中需求实现的体例, 如果直接调用的话, 会是和单线程一样的结果, 要另起线程需求利用start().

start(): 新起线程调用run(). 主线程不等候直接往下履行

join(): 如果有一个Thread a, 在a.start()前面(可利用thread.isAlive()判定). 利用a.join() 可使主线程等候a履行完. 如果同时有多个线程a, b, c, 而d需求等abc履行完后才气履行, 可以在d start之前利用a.join, b.join, c.join, 也能够把a, b, c的start放到d的run体例内里, 利用a.join, b.join, c.join, 可以用参数设置timeout时候
 

class JoiningThread extends Thread {
    // NOTE: UNTESTED!

    private String name;
    private Thread nextThread;

    public JoiningThread(String name) {
        this(name, null);
    }

    public JoiningThread(String name, Thread other) {
        this.name = name;
        this.nextThread = other;
    }

    public String getName() {
        return name;
    }

    @Override
    public void run() {
        System.out.println("Hello I'm thread ".concat(getName()));
        if (nextThread != null) {
            while(nextThread.isAlive()) {
                try {
                    nextThread.join();
                } catch (InterruptedException e) {
                    // ignore this
                }
            }
        }
        System.out.println("I'm finished ".concat(getName()));
    }
}

利用的时候

public static void main(String[] args) {
    Thread d = WaitingThread("d");
    Thread c = WaitingThread("c", d);
    Thread b = WaitingThread("b", c);
    Thread a = WaitingThread("a", b);

    a.start();
    b.start();
    c.start();
    d.start();

    try {
        a.join();
    } catch (InterruptedException e) {}
}

yield(): 没发明有甚么特别, 仿佛是可以包管不合优先级的线程不会争先运行

sleep(): 需求时候作为参数, 可以被interrupt.

wait() and notify(): 和join()的辨别是, wait需求分外的notify来停止, 下面的类可以改写为

class WaitingThread extends Thread {
    // NOTE: UNTESTED!

    private Thread previousThread;
    private String name;

    public WaitingThread(String name) {
        this(name, null);
    }

    public WaitingThread(String name, Thread other) {
        this.name = name;
        this.previousThread = other;
    }

    public String getName() {
        return name;
    }

    @Override
    public void run() {
        System.out.println("Hello I'm thread ".concat(getName()));
        // Do other things if required

        // Wait to be woken up
        while(true) {
            synchronized(this) {
                try {
                    wait();
                    break;
                } catch (InterruptedException e) {
                    // ignore this
                }
            }
        }

        System.out.println("I'm finished ".concat(getName()));

        // Wake up the previous thread
        if (previousThread != null) {
            synchronized(previousThread) {
                previousThread.notify();
            }
        }
    }
}
顶一下
(0)
0%
踩一下
(0)
0%
------分开线----------------------------
标签(Tag):Java JAVA实例教程 JAVA根本教程 Java源代码 Java技能
------分开线----------------------------
颁发评论
请自发遵循互联网相关的政策法规,严禁公布色情、暴力、革命的谈吐。
评价:
神色:
考证码:点击我更换图片
猜你感兴趣