Java多线程-基本使用

来源:互联网 发布:cfd软件 编辑:程序博客网 时间:2024/05/18 22:42

注:参考《Thinking in Java》

多线程是比多进程更低层次的一种多任务概念。而 线程驱动任务(不要理解为线程就是任务,而应该理解成线程驱动任务)


如下:


关于Thread.yield() 方法,可以理解为线程让步。当前线程从执行状态(run()方法中)变为就绪状态,而把自己的CPU执行时间让给其他线程。大概可以理解为:我执行的差不多了(run方法的循环中的一次迭代的操作),这个时候建议线程调度器调度其它线程来执行。也是在建议具有相同优先级的其它线程运行。


即:我现在不那么急,如果有人比较急可以现在先执行,我待会再执行,但是如果没有,我自己接着继续执行。(这时候锁并不会被释放)

public class LiftOff implements Runnable{protected int countDown = 10;private static int taskCount = 0;private final int id = taskCount++;public LiftOff() {}public String status(){return "#" + id + "(" + (countDown > 0 ? countDown : "Liftoff!") + "). ";}public void run() {// TODO Auto-generated method stubwhile(countDown-- > 0){System.out.println(status());Thread.yield();}}}

可以直接调用LiftOff实例的run方法,但是这样就不是线程驱动,而是直接调用。注意如果这么干,不会新开启一个线程,而是会直接运行run()的代码。

方法之一是: 可以实现Runnale接口并编写其run()方法,run()方法里面描述要执行的任务。

public class MoreBasicThreads {    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        for(int i=0; i<5; i++)            new Thread(new LiftOff()).start();        System.out.println("Waiting for LiftOff");    }}
以上用多个线程去驱动了多个任务,从输出结果来看:运行的线程(包括main方法的线程)都是杂乱无章,换进换出时混在一起的。

而且可以观察到start方法很快就返回了:Waiting for LiftOff第一个输出。

Waiting for LiftOff
#1(9).
#0(9).
#2(9).
#4(9).
#1(8).
#0(8).
#4(8).
#1(7).
#4(7).
#2(8).
#3(9).
#2(7).
#1(6).
#0(7).
#1(5).
#0(6).
#2(6).
#3(8).
#4(6).
#3(7).
#2(5).
#0(5).
#1(4).
#3(6).
#4(5).
#2(4).
#1(3).
#0(4).
#1(2).
#0(3).
#2(3).
#4(4).
#3(5).
#4(3).
#2(2).
#0(2).
#1(1).
#0(1).
#2(1).
#4(2).
#3(4).
#1(Liftoff!).
#0(Liftoff!).
#2(Liftoff!).
#4(1).
#3(3).
#3(2).
#4(Liftoff!).
#3(1).
#3(Liftoff!).

当然还有其它方式:

比如:

public class SimpleThread extends Thread{

    public void run(){

       //some code

    }

}

直接继承Thread类,写run()方法。然后start启动SimpleThread即可。


0 0
原创粉丝点击