多线程 sleep,yield,join

jdk 中yield方法注释翻译:

提示调度程序当前线程愿意放弃当前对处理器的使用。调度程序可以忽略这个提示。

Yield是一种启发式尝试,旨在改善线程之间的相对进展,否则线程将过度使用CPU。它的使用应该与详细的分析和基准测试结合起来,以确保它实际上具有预期的效果。

很少使用这种方法。对于调试或测试目的,它可能会很有用,因为它可以帮助再现由于竞争条件而产生的bug。在设计诸如{@link java.util.concurrent中的并发控制结构时,它可能也很有用。锁}包

yield: 在多个线程执行的过程中,方法内部调用yield方法,表时该线程在此刻由jvm中该线程程序计数器记录下当前执行顺序,然后将cup资源释放,该线程由运行状态变成准备执行状态(就是现在待执行的状态,可以参与线程挣用的状态),同时,和其他待执行的线程进行竞争。

package com.cn.demo.threadTest;

public class YieldAndSleepAndJoin {

    public static void main(String[] args) {


//        sleep_test();
        yield_test();
//        join_test();
        //主线程执行
        for (int i = 0; i <10 ; i++) {
            System.out.println("主线程开始执行......");
            System.out.println("主线程执行结果 main  i= "+i);
        }
        System.out.println("主线程执行结束......");
    }

    //sleep
    static void sleep_test(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i <= 100; i++) {
                    System.out.println("sleep 方法开始执行......");
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }
    //yield
    static void yield_test(){
        //线程1
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i <= 100; i++) {
                    System.out.println(Thread.currentThread().getName()+",执行结果:i = "+i);
                    if (i%2==0){
                        System.out.println(Thread.currentThread().getName()+",线程 执行yield 方法");
                        Thread.yield();
                    }
                }
                System.out.println(Thread.currentThread().getName()+"线程执行结束......");
            }
        }).start();
        //线程2
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i <= 100; i++) {
                    System.out.println(Thread.currentThread().getName()+",执行结果:i = "+i);
                    if (i%5==0){
                        System.out.println(Thread.currentThread().getName()+",线程 执行yield 方法");
                        Thread.yield();
                    }
                }
                System.out.println(Thread.currentThread().getName()+"线程执行结束......");
            }
        }).start();
        //线程3
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i <= 100; i++) {
                    System.out.println(Thread.currentThread().getName()+",执行结果:i = "+i);
                }
                System.out.println(Thread.currentThread().getName()+"线程执行结束......");
            }
        }).start();
    }

    static void join_test(){
        //线程1
        final Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i <= 10; i++) {
                    System.out.println("线程A开始执行......");
                    System.out.println("线程A执行结果:i = A"+i);
                }
                System.out.println("线程A执行结束");
            }
        });
        //线程2
        final Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i <= 10; i++) {
                    System.out.println("线程B开始执行......");
                    System.out.println("线程B执行结果:i = B" + i);
                }
                System.out.println("线程B执行结束");
            }
        });
        //线程3
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    System.out.println("开始执行线程A 的join.......");
                    thread1.join();
                    System.out.println("开始执行线程 的join.......");
                    thread2.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                for (int i = 0; i <= 10; i++) {
                    System.out.println("线程C开始执行......");
                    System.out.println("线程C执行结果:i = C"+i);
                }
                System.out.println("线程C执行结束");
            }
        }).start();

        thread1.start();
        thread2.start();
    }
}

执行结果:

com.cn.demo.threadTest.YieldAndSleepAndJoin
Connected to the target VM, address: '127.0.0.1:56677', transport: 'socket'
Thread-0,执行结果:i = 0       //main方法中根据执行顺序启动yield test线程
Thread-0,线程 执行yield 方法   //Thread-0 掉用yield方法,线程释放cup资源,主线程和线程0,线程            
                                1,线程2,争夺cup资源,最后线程0争夺到cup资源,下面也是这个方                                                            式去争夺资源的
Thread-0,执行结果:i = 1
Thread-0,执行结果:i = 2
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 3
Thread-0,执行结果:i = 4
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 5
Thread-0,执行结果:i = 6
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 7
Thread-0,执行结果:i = 8
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 9
Thread-0,执行结果:i = 10
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 11
Thread-0,执行结果:i = 12
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 13
Thread-0,执行结果:i = 14
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 15
Thread-0,执行结果:i = 16
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 17
Thread-0,执行结果:i = 18
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 19
Thread-0,执行结果:i = 20
Thread-0,线程 执行yield 方法
Thread-1,执行结果:i = 0
Thread-0,执行结果:i = 21
Thread-0,执行结果:i = 22
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 23
Thread-0,执行结果:i = 24
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 25
Thread-0,执行结果:i = 26
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 27
Thread-0,执行结果:i = 28
Thread-0,线程 执行yield 方法
Thread-1,线程 执行yield 方法
Thread-0,执行结果:i = 29
Thread-0,执行结果:i = 30
Thread-0,线程 执行yield 方法
Thread-1,执行结果:i = 1
主线程开始执行......
Thread-0,执行结果:i = 31
主线程执行结果 main  i= 0
主线程开始执行......
主线程执行结果 main  i= 1
Thread-2,执行结果:i = 0
Thread-2,执行结果:i = 1
Thread-1,执行结果:i = 2
Thread-2,执行结果:i = 2
Thread-2,执行结果:i = 3
Thread-2,执行结果:i = 4
Thread-2,执行结果:i = 5
Thread-2,执行结果:i = 6
主线程开始执行......
主线程执行结果 main  i= 2
主线程开始执行......
主线程执行结果 main  i= 3
主线程开始执行......
主线程执行结果 main  i= 4
主线程开始执行......
主线程执行结果 main  i= 5
主线程开始执行......
主线程执行结果 main  i= 6
主线程开始执行......
Thread-0,执行结果:i = 32
主线程执行结果 main  i= 7
主线程开始执行......
Thread-2,执行结果:i = 7
Thread-1,执行结果:i = 3
Thread-2,执行结果:i = 8
主线程执行结果 main  i= 8
主线程开始执行......
主线程执行结果 main  i= 9
主线程执行结束......
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 33
Thread-0,执行结果:i = 34
Thread-0,线程 执行yield 方法
Thread-2,执行结果:i = 9
Thread-1,执行结果:i = 4
Thread-1,执行结果:i = 5
Thread-1,线程 执行yield 方法
Thread-1,执行结果:i = 6
Thread-1,执行结果:i = 7
Thread-1,执行结果:i = 8
Thread-1,执行结果:i = 9
Thread-2,执行结果:i = 10
Thread-0,执行结果:i = 35
Thread-0,执行结果:i = 36
Thread-0,线程 执行yield 方法
Thread-2,执行结果:i = 11
Thread-1,执行结果:i = 10
Thread-1,线程 执行yield 方法
Thread-1,执行结果:i = 11
Thread-1,执行结果:i = 12
Thread-1,执行结果:i = 13
Thread-1,执行结果:i = 14
Thread-1,执行结果:i = 15
Thread-1,线程 执行yield 方法
Thread-1,执行结果:i = 16
Thread-1,执行结果:i = 17
Thread-2,执行结果:i = 12
Thread-2,执行结果:i = 13
Thread-0,执行结果:i = 37
Thread-0,执行结果:i = 38
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 39
Thread-0,执行结果:i = 40
Thread-2,执行结果:i = 14
Thread-1,执行结果:i = 18
Thread-2,执行结果:i = 15
Thread-2,执行结果:i = 16
Thread-0,线程 执行yield 方法
Thread-2,执行结果:i = 17
Thread-1,执行结果:i = 19
Thread-2,执行结果:i = 18
Thread-0,执行结果:i = 41
Thread-0,执行结果:i = 42
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 43
Thread-0,执行结果:i = 44
Thread-0,线程 执行yield 方法
Thread-2,执行结果:i = 19
Thread-1,执行结果:i = 20
Thread-1,线程 执行yield 方法
Thread-1,执行结果:i = 21
Thread-1,执行结果:i = 22
Thread-1,执行结果:i = 23
Thread-1,执行结果:i = 24
Thread-1,执行结果:i = 25
Thread-1,线程 执行yield 方法
Thread-1,执行结果:i = 26
Thread-1,执行结果:i = 27
Thread-1,执行结果:i = 28
Thread-1,执行结果:i = 29
Thread-1,执行结果:i = 30
Thread-2,执行结果:i = 20
Thread-0,执行结果:i = 45
Thread-0,执行结果:i = 46
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 47
Thread-0,执行结果:i = 48
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 49
Thread-0,执行结果:i = 50
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 51
Thread-0,执行结果:i = 52
Thread-0,线程 执行yield 方法
Thread-2,执行结果:i = 21
Thread-1,线程 执行yield 方法
Thread-1,执行结果:i = 31
Thread-1,执行结果:i = 32
Thread-1,执行结果:i = 33
Thread-1,执行结果:i = 34
Thread-1,执行结果:i = 35
Thread-1,线程 执行yield 方法
Thread-1,执行结果:i = 36
Thread-2,执行结果:i = 22
Thread-0,执行结果:i = 53
Thread-0,执行结果:i = 54
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 55
Thread-0,执行结果:i = 56
Thread-0,线程 执行yield 方法
Thread-2,执行结果:i = 23
Thread-1,执行结果:i = 37
Thread-1,执行结果:i = 38
Thread-1,执行结果:i = 39
Thread-1,执行结果:i = 40
Thread-1,线程 执行yield 方法
Thread-1,执行结果:i = 41
Thread-1,执行结果:i = 42
Thread-1,执行结果:i = 43
Thread-1,执行结果:i = 44
Thread-1,执行结果:i = 45
Thread-1,线程 执行yield 方法
Thread-1,执行结果:i = 46
Thread-1,执行结果:i = 47
Thread-1,执行结果:i = 48
Thread-1,执行结果:i = 49
Thread-1,执行结果:i = 50
Thread-1,线程 执行yield 方法
Thread-1,执行结果:i = 51
Thread-1,执行结果:i = 52
Thread-1,执行结果:i = 53
Thread-1,执行结果:i = 54
Thread-1,执行结果:i = 55
Thread-1,线程 执行yield 方法
Thread-1,执行结果:i = 56
Thread-1,执行结果:i = 57
Thread-1,执行结果:i = 58
Thread-1,执行结果:i = 59
Thread-1,执行结果:i = 60
Thread-1,线程 执行yield 方法
Thread-1,执行结果:i = 61
Thread-1,执行结果:i = 62
Thread-1,执行结果:i = 63
Thread-1,执行结果:i = 64
Thread-1,执行结果:i = 65
Thread-1,线程 执行yield 方法
Thread-1,执行结果:i = 66
Thread-1,执行结果:i = 67
Thread-1,执行结果:i = 68
Thread-1,执行结果:i = 69
Thread-1,执行结果:i = 70
Thread-1,线程 执行yield 方法
Thread-1,执行结果:i = 71
Thread-1,执行结果:i = 72
Thread-1,执行结果:i = 73
Thread-1,执行结果:i = 74
Thread-1,执行结果:i = 75
Thread-1,线程 执行yield 方法
Thread-2,执行结果:i = 24
Thread-0,执行结果:i = 57
Thread-2,执行结果:i = 25
Thread-2,执行结果:i = 26
Thread-2,执行结果:i = 27
Thread-2,执行结果:i = 28
Thread-2,执行结果:i = 29
Thread-1,执行结果:i = 76
Thread-1,执行结果:i = 77
Thread-1,执行结果:i = 78
Thread-1,执行结果:i = 79
Thread-1,执行结果:i = 80
Thread-1,线程 执行yield 方法
Thread-1,执行结果:i = 81
Thread-1,执行结果:i = 82
Thread-1,执行结果:i = 83
Thread-1,执行结果:i = 84
Thread-1,执行结果:i = 85
Thread-1,线程 执行yield 方法
Thread-2,执行结果:i = 30
Thread-2,执行结果:i = 31
Thread-2,执行结果:i = 32
Thread-2,执行结果:i = 33
Thread-2,执行结果:i = 34
Thread-0,执行结果:i = 58
Thread-2,执行结果:i = 35
Thread-2,执行结果:i = 36
Thread-2,执行结果:i = 37
Thread-2,执行结果:i = 38
Thread-2,执行结果:i = 39
Thread-2,执行结果:i = 40
Thread-2,执行结果:i = 41
Thread-2,执行结果:i = 42
Thread-2,执行结果:i = 43
Thread-2,执行结果:i = 44
Thread-2,执行结果:i = 45
Thread-2,执行结果:i = 46
Thread-2,执行结果:i = 47
Thread-2,执行结果:i = 48
Thread-2,执行结果:i = 49
Thread-2,执行结果:i = 50
Thread-2,执行结果:i = 51
Thread-2,执行结果:i = 52
Thread-2,执行结果:i = 53
Thread-2,执行结果:i = 54
Thread-2,执行结果:i = 55
Thread-2,执行结果:i = 56
Thread-2,执行结果:i = 57
Thread-2,执行结果:i = 58
Thread-2,执行结果:i = 59
Thread-2,执行结果:i = 60
Thread-2,执行结果:i = 61
Thread-2,执行结果:i = 62
Thread-1,执行结果:i = 86
Thread-2,执行结果:i = 63
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 59
Thread-0,执行结果:i = 60
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 61
Thread-0,执行结果:i = 62
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 63
Thread-0,执行结果:i = 64
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 65
Thread-0,执行结果:i = 66
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 67
Thread-0,执行结果:i = 68
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 69
Thread-0,执行结果:i = 70
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 71
Thread-0,执行结果:i = 72
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 73
Thread-0,执行结果:i = 74
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 75
Thread-0,执行结果:i = 76
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 77
Thread-0,执行结果:i = 78
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 79
Thread-0,执行结果:i = 80
Thread-0,线程 执行yield 方法
Thread-2,执行结果:i = 64
Thread-2,执行结果:i = 65
Thread-2,执行结果:i = 66
Thread-2,执行结果:i = 67
Thread-2,执行结果:i = 68
Thread-1,执行结果:i = 87
Thread-1,执行结果:i = 88
Thread-1,执行结果:i = 89
Thread-1,执行结果:i = 90
Thread-1,线程 执行yield 方法
Thread-1,执行结果:i = 91
Thread-1,执行结果:i = 92
Thread-1,执行结果:i = 93
Thread-1,执行结果:i = 94
Thread-2,执行结果:i = 69
Thread-0,执行结果:i = 81
Thread-0,执行结果:i = 82
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 83
Thread-0,执行结果:i = 84
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 85
Thread-0,执行结果:i = 86
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 87
Thread-0,执行结果:i = 88
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 89
Thread-0,执行结果:i = 90
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 91
Thread-0,执行结果:i = 92
Thread-2,执行结果:i = 70
Thread-1,执行结果:i = 95
Thread-1,线程 执行yield 方法
Thread-1,执行结果:i = 96
Thread-1,执行结果:i = 97
Thread-1,执行结果:i = 98
Thread-1,执行结果:i = 99
Thread-1,执行结果:i = 100
Thread-1,线程 执行yield 方法
Thread-1线程执行结束......
Thread-2,执行结果:i = 71
Thread-2,执行结果:i = 72
Thread-2,执行结果:i = 73
Thread-2,执行结果:i = 74
Thread-2,执行结果:i = 75
Thread-2,执行结果:i = 76
Thread-2,执行结果:i = 77
Thread-2,执行结果:i = 78
Thread-2,执行结果:i = 79
Thread-2,执行结果:i = 80
Thread-2,执行结果:i = 81
Thread-2,执行结果:i = 82
Thread-2,执行结果:i = 83
Thread-2,执行结果:i = 84
Thread-2,执行结果:i = 85
Thread-2,执行结果:i = 86
Thread-2,执行结果:i = 87
Thread-2,执行结果:i = 88
Thread-2,执行结果:i = 89
Thread-2,执行结果:i = 90
Thread-0,线程 执行yield 方法
Thread-2,执行结果:i = 91
Thread-2,执行结果:i = 92
Thread-2,执行结果:i = 93
Thread-2,执行结果:i = 94
Thread-2,执行结果:i = 95
Thread-2,执行结果:i = 96
Thread-2,执行结果:i = 97
Thread-0,执行结果:i = 93
Thread-2,执行结果:i = 98
Thread-2,执行结果:i = 99
Thread-2,执行结果:i = 100
Thread-0,执行结果:i = 94
Thread-0,线程 执行yield 方法
Thread-2线程执行结束......
Thread-0,执行结果:i = 95
Thread-0,执行结果:i = 96
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 97
Thread-0,执行结果:i = 98
Thread-0,线程 执行yield 方法
Thread-0,执行结果:i = 99
Thread-0,执行结果:i = 100
Thread-0,线程 执行yield 方法
Thread-0线程执行结束......
Disconnected from the target VM, address: '127.0.0.1:56677', transport: 'socket'

Process finished with exit code 0

join :等待这个线程结束。此方法的调用与调用的行为完全相同

join 方法在调用join 方法,会打断此线程内的正在执行的线程,转而去执行调起的线程,等待调起的线程执行完,再回头执行此线程。再多线程中,A 线程中调用B.join(),A线程cup指令执行到B.join时,会停下A线程,执行B线程,但是,如果由C线程,和D线程都处于等待执行的时候,B,C,D 会争夺cup资源去执行线程,而A不会和他们进行争抢,如果B执行结束了,A才会去参与资源的竞争。

package com.cn.demo.threadTest;

public class YieldAndSleepAndJoin {

    public static void main(String[] args) {


//        sleep_test();
//        yield_test();
        join_test();
        //主线程执行
        for (int i = 0; i <10 ; i++) {
            System.out.println("主线程开始执行......");
            System.out.println("主线程执行结果 main  i= "+i);
        }
        System.out.println("主线程执行结束......");
    }

    //sleep
    static void sleep_test(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i <= 100; i++) {
                    System.out.println("sleep 方法开始执行......");
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }
    //yield
    static void yield_test(){
        //线程1
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i <= 100; i++) {
                    System.out.println(Thread.currentThread().getName()+",执行结果:i = "+i);
                    if (i%2==0){
                        System.out.println(Thread.currentThread().getName()+",线程 执行yield 方法");
                        Thread.yield();
                    }
                }
                System.out.println(Thread.currentThread().getName()+"线程执行结束......");
            }
        }).start();
        //线程2
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i <= 100; i++) {
                    System.out.println(Thread.currentThread().getName()+",执行结果:i = "+i);
                    if (i%5==0){
                        System.out.println(Thread.currentThread().getName()+",线程 执行yield 方法");
                        Thread.yield();
                    }
                }
                System.out.println(Thread.currentThread().getName()+"线程执行结束......");
            }
        }).start();
        //线程3
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i <= 100; i++) {
                    System.out.println(Thread.currentThread().getName()+",执行结果:i = "+i);
                }
                System.out.println(Thread.currentThread().getName()+"线程执行结束......");
            }
        }).start();
    }

    static void join_test(){
        //线程1
        final Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i <= 10; i++) {
                    System.out.println("线程A开始执行......");
                    System.out.println("线程A执行结果:i = A"+i);
                }
                System.out.println("线程A执行结束");
            }
        });
        //线程2
        final Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i <= 10; i++) {
                    System.out.println("线程B开始执行......");
                    System.out.println("线程B执行结果:i = B" + i);
                }
                System.out.println("线程B执行结束");
            }
        });
        //线程3
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    System.out.println("开始执行线程A 的join.......");
                    thread1.join();
                    System.out.println("开始执行线程 的join.......");
                    thread2.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                for (int i = 0; i <= 10; i++) {
                    System.out.println("线程C开始执行......");
                    System.out.println("线程C执行结果:i = C"+i);
                }
                System.out.println("线程C执行结束");
            }
        }).start();

        thread1.start();
        thread2.start();
    }
}
Disconnected from the target VM, address: '127.0.0.1:56701', transport: 'socket'
开始执行线程A 的join.......   程序中先执行C线程,C中显示调用A和B的join方法,所以A和B和主线程进行cup资源争抢,C是不参与cup资源争抢的,再A和B执行完成后,C才和主线程(此时主线程还没执行结束)进行cup资源争夺。
线程A开始执行......
主线程开始执行......
线程A执行结果:i = A0
线程B开始执行......
主线程执行结果 main  i= 0
主线程开始执行......
线程B执行结果:i = B0
线程B开始执行......
线程A开始执行......
线程B执行结果:i = B1
线程B开始执行......
线程B执行结果:i = B2
线程B开始执行......
线程B执行结果:i = B3
线程B开始执行......
线程B执行结果:i = B4
线程B开始执行......
主线程执行结果 main  i= 1
主线程开始执行......
主线程执行结果 main  i= 2
主线程开始执行......
主线程执行结果 main  i= 3
主线程开始执行......
线程B执行结果:i = B5
线程B开始执行......
线程A执行结果:i = A1
线程A开始执行......
线程A执行结果:i = A2
线程A开始执行......
线程A执行结果:i = A3
线程A开始执行......
线程B执行结果:i = B6
线程B开始执行......
线程B执行结果:i = B7
线程B开始执行......
主线程执行结果 main  i= 4
主线程开始执行......
主线程执行结果 main  i= 5
主线程开始执行......
线程B执行结果:i = B8
线程B开始执行......
线程B执行结果:i = B9
线程B开始执行......
线程B执行结果:i = B10
线程B执行结束
线程A执行结果:i = A4
线程A开始执行......
线程A执行结果:i = A5
线程A开始执行......
线程A执行结果:i = A6
线程A开始执行......
线程A执行结果:i = A7
线程A开始执行......
主线程执行结果 main  i= 6
主线程开始执行......
线程A执行结果:i = A8
线程A开始执行......
线程A执行结果:i = A9
主线程执行结果 main  i= 7
主线程开始执行......
线程A开始执行......
线程A执行结果:i = A10
线程A执行结束
主线程执行结果 main  i= 8
主线程开始执行......
主线程执行结果 main  i= 9
主线程执行结束......
开始执行线程 的join.......
线程C开始执行......
线程C执行结果:i = C0
线程C开始执行......
线程C执行结果:i = C1
线程C开始执行......
线程C执行结果:i = C2
线程C开始执行......
线程C执行结果:i = C3
线程C开始执行......
线程C执行结果:i = C4
线程C开始执行......
线程C执行结果:i = C5
线程C开始执行......
线程C执行结果:i = C6
线程C开始执行......
线程C执行结果:i = C7
线程C开始执行......
线程C执行结果:i = C8
线程C开始执行......
线程C执行结果:i = C9
线程C开始执行......
线程C执行结果:i = C10
线程C执行结束

Process finished with exit code 0

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值