Runnable使用

class LiftOff implements Runnable {
    protected int countDown = 10;//default
    private static int taskCount = 0;
    private final int id = taskCount++;

    public LiftOff() {
    }

    public LiftOff(int countDown) {
        this.countDown = countDown;
    }

    public String status() {
        return "#" + id + "(" + (countDown == 0 ? "LiftOff!" : countDown) + ")、";
    }

    public void run() {
        while (countDown-- > 0) {
            System.out.print(status());
            Thread.yield();//告诉cpu可以让其他线程运行了
        }
    }
}


class ThreadTest {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            new Thread(new LiftOff(5)).start();
        }
        System.out.println("main is ready");
    }
}

结果每次是不一样的:

#1(4)、#0(4)、#2(4)、#0(3)、#2(3)、#1(3)、
#2(2)、#2(1)、#2(LiftOff!)、#0(2)、
#3(4)、#0(1)、#1(2)、#0(LiftOff!)、#3(3)、#1(1)
、#3(2)、#1(LiftOff!)、#3(1)、#3(LiftOff!)、main is ready
#4(4)、#4(3)、#4(2)、#4(1)、#4(LiftOff!)

or

#0(4)、#2(4)、main is ready
#1(4)、#0(3)、#1(3)、#3(4)、#0(2)、#2(3)、#4(4)、#2(2)、#0(1)、#1(2)、
#0(LiftOff!)、#3(3)、#2(1)、#2(LiftOff!)、#4(3)、#4(2)
、#3(2)、#1(1)、#3(1)、#4(1)、#1(LiftOff!)、#3(LiftOff!)、#4(LiftOff!)

使用Executor

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

class ThreadTest {
    public static void main(String[] args) {
        System.out.println("main is ready");
        ExecutorService eService = Executors.newCachedThreadPool();
        for (int i = 0; i < 5; i++) {
            eService.execute(new LiftOff(5));
        }
        eService.shutdown();//防止新任务被提交给此Executor
    }
}

也可以固定线程池:

ExecutorService eService = Executors.newFixedThreadPool(5);

单一线程池,相当于顺序执行:

ExecutorService eService = Executors.newSingleThreadExecutor();
        for (int i = 0; i < 5; i++) {
            eService.execute(new LiftOff(5));
        }

结果:

main is ready
#0(4)、#0(3)、#0(2)、#0(1)、#0(LiftOff!)、
#1(4)、#1(3)、#1(2)、#1(1)、#1(LiftOff!)、
#2(4)、#2(3)、#2(2)、#2(1)、#2(LiftOff!)
、#3(4)、#3(3)、#3(2)、#3(1)、#3(LiftOff!)、
#4(4)、#4(3)、#4(2)、#4(1)、#4(LiftOff!)

results matching ""

    No results matching ""