创建线程的三种方式:

1.继承Thread

 

package com.picchealth.hmbms.utils.export;

/**
 * Created by zyq on 2020/7/31.
 */
public class FirstThreadTest extends Thread {

    //重写run方法,run方法的方法体就是线程的执行体
    public void run(){
        for (int i = 0; i <100 ; i++) {
            System.out.println(getName()+" "+i);
        }
    }

    public static void main(String[] args) {
        for (int i = 0; i <100 ; i++) {
            System.out.println(Thread.currentThread().getName()+":"+i);
            if (i==20){
                new FirstThreadTest().start();
                new FirstThreadTest().start();
            }
        }
    }
}

 

 

运行结果:

main:0

main:1

main:2

main:3

main:4

main:5

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

main:20

main:21

main:22

main:23

main:24

main:25

main:26

main:27

main:28

main:29

main:30

main:31

main:32

main:33

main:34

main:35

main:36

main:37

main:38

main:39

main:40

main:41

main:42

main:43

main:44

main:45

main:46

main:47

main:48

main:49

main:50

main:51

main:52

main:53

main:54

main:55

main:56

main:57

main:58

main:59

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

main:60

main:61

main:62

main:63

main:64

main:65

main:66

main:67

main:68

Thread-1 0

main:69

main:70

main:71

main:72

main:73

main:74

main:75

main:76

main:77

main:78

main:79

main:80

main:81

main:82

main:83

main:84

main:85

main:86

main:87

main:88

main:89

main:90

main:91

main:92

main:93

main:94

main:95

main:96

main:97

main:98

main:99

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

Thread-0 20

Thread-1 1

Thread-0 21

Thread-0 22

Thread-0 23

Thread-1 2

Thread-1 3

Thread-1 4

Thread-1 5

Thread-1 6

Thread-1 7

Thread-1 8

Thread-1 9

Thread-1 10

Thread-1 11

Thread-1 12

Thread-1 13

Thread-1 14

Thread-1 15

Thread-1 16

Thread-1 17

Thread-1 18

Thread-1 19

Thread-1 20

Thread-1 21

Thread-0 24

Thread-0 25

Thread-0 26

Thread-0 27

Thread-0 28

Thread-0 29

Thread-0 30

Thread-0 31

Thread-0 32

Thread-0 33

Thread-0 34

Thread-0 35

Thread-0 36

Thread-0 37

Thread-0 38

Thread-1 22

Thread-1 23

Thread-1 24

Thread-1 25

Thread-1 26

Thread-1 27

Thread-1 28

Thread-1 29

Thread-1 30

Thread-1 31

Thread-1 32

Thread-1 33

Thread-1 34

Thread-1 35

Thread-1 36

Thread-1 37

Thread-1 38

Thread-1 39

Thread-1 40

Thread-1 41

Thread-1 42

Thread-1 43

Thread-1 44

Thread-1 45

Thread-1 46

Thread-1 47

Thread-1 48

Thread-1 49

Thread-1 50

Thread-1 51

Thread-1 52

Thread-1 53

Thread-1 54

Thread-1 55

Thread-1 56

Thread-1 57

Thread-1 58

Thread-1 59

Thread-1 60

Thread-1 61

Thread-1 62

Thread-1 63

Thread-1 64

Thread-1 65

Thread-1 66

Thread-1 67

Thread-1 68

Thread-1 69

Thread-1 70

Thread-1 71

Thread-1 72

Thread-1 73

Thread-1 74

Thread-1 75

Thread-1 76

Thread-1 77

Thread-1 78

Thread-1 79

Thread-1 80

Thread-1 81

Thread-1 82

Thread-1 83

Thread-1 84

Thread-1 85

Thread-1 86

Thread-1 87

Thread-1 88

Thread-1 89

Thread-1 90

Thread-0 39

Thread-0 40

Thread-0 41

Thread-1 91

Thread-1 92

Thread-1 93

Thread-1 94

Thread-1 95

Thread-1 96

Thread-1 97

Thread-1 98

Thread-1 99

Thread-0 42

Thread-0 43

Thread-0 44

Thread-0 45

Thread-0 46

Thread-0 47

Thread-0 48

Thread-0 49

Thread-0 50

Thread-0 51

Thread-0 52

Thread-0 53

Thread-0 54

Thread-0 55

Thread-0 56

Thread-0 57

Thread-0 58

Thread-0 59

Thread-0 60

Thread-0 61

Thread-0 62

Thread-0 63

Thread-0 64

Thread-0 65

Thread-0 66

Thread-0 67

Thread-0 68

Thread-0 69

Thread-0 70

Thread-0 71

Thread-0 72

Thread-0 73

Thread-0 74

Thread-0 75

Thread-0 76

Thread-0 77

Thread-0 78

Thread-0 79

Thread-0 80

Thread-0 81

Thread-0 82

Thread-0 83

Thread-0 84

Thread-0 85

Thread-0 86

Thread-0 87

Thread-0 88

Thread-0 89

Thread-0 90

Thread-0 91

Thread-0 92

Thread-0 93

Thread-0 94

Thread-0 95

Thread-0 96

Thread-0 97

Thread-0 98

Thread-0 99

 

2.通过runnable接口创建线程类

 

package com.picchealth.hmbms.utils.export;

/**
 * Created by zyq on 2020/7/31.
 */
public class RunableThreadTest implements Runnable {

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName()+" "i);
            
        }

    }

    public static void main(String[] args) {
        for (int i = 0; i <100 ; i++) {
            System.out.println(Thread.currentThread().getName()+" "+i);
            if(i==20){
                RunableThreadTest runableThreadTest=new RunableThreadTest();
                new Thread(runableThreadTest,"新线程1").start();
                new Thread(runableThreadTest,"新线程2").start();
            }
        }
    }
}

 

运行结果:

D:\SoftWare\jdk\bin\java "-javaagent:D:\SoftWare\idea\IntelliJ IDEA 2017.1.1\lib\idea_rt.jar=60748:D:\SoftWare\idea\IntelliJ IDEA 2017.1.1\bin" -classpath C:\Users\ZhaoYongqiang\AppData\Local\Temp\classpath538.jar -Dfile.encoding=UTF-8 com.picchealth.hmbms.utils.export.RunableThreadTest
main 0
main 1
main 2
main 3
main 4
main 5
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
main 20
main 21
main 22
main 23
main 24
新线程1 0
新线程1 1
新线程2 0
新线程2 1
新线程2 2
main 25
main 26
新线程2 3
新线程1 2
新线程1 3
新线程1 4
新线程1 5
新线程1 6
新线程1 7
新线程1 8
新线程1 9
新线程1 10
新线程1 11
新线程1 12
新线程1 13
新线程1 14
新线程1 15
新线程1 16
新线程1 17
新线程1 18
新线程1 19
新线程1 20
新线程1 21
新线程1 22
新线程2 4
新线程2 5
新线程2 6
main 27
新线程2 7
新线程2 8
新线程2 9
新线程2 10
新线程2 11
新线程2 12
新线程2 13
新线程2 14
新线程2 15
新线程2 16
新线程2 17
新线程2 18
新线程2 19
新线程2 20
新线程1 23
新线程1 24
新线程1 25
新线程1 26
新线程1 27
新线程1 28
新线程1 29
新线程1 30
新线程1 31
新线程1 32
新线程1 33
新线程1 34
新线程1 35
新线程1 36
新线程1 37
新线程1 38
新线程1 39
新线程1 40
新线程1 41
新线程1 42
新线程1 43
新线程1 44
新线程1 45
新线程1 46
新线程2 21
新线程2 22
新线程2 23
新线程2 24
新线程2 25
新线程2 26
新线程2 27
新线程2 28
新线程2 29
新线程2 30
新线程2 31
新线程2 32
新线程2 33
新线程2 34
新线程2 35
新线程2 36
新线程2 37
main 28
main 29
main 30
main 31
main 32
main 33
新线程2 38
新线程2 39
新线程2 40
新线程2 41
新线程2 42
新线程2 43
新线程1 47
新线程1 48
新线程2 44
新线程2 45
新线程2 46
新线程2 47
新线程2 48
新线程2 49
新线程2 50
新线程2 51
新线程2 52
新线程2 53
新线程2 54
新线程2 55
新线程2 56
新线程2 57
新线程2 58
新线程2 59
新线程2 60
新线程2 61
新线程2 62
main 34
新线程2 63
新线程2 64
新线程2 65
新线程2 66
新线程2 67
新线程2 68
新线程2 69
新线程2 70
新线程2 71
新线程2 72
新线程2 73
新线程2 74
新线程1 49
新线程2 75
main 35
main 36
main 37
main 38
main 39
main 40
main 41
main 42
main 43
main 44
main 45
main 46
main 47
main 48
main 49
main 50
main 51
main 52
main 53
main 54
main 55
main 56
main 57
main 58
main 59
main 60
main 61
main 62
main 63
main 64
main 65
新线程2 76
新线程2 77
新线程2 78
新线程2 79
新线程2 80
新线程2 81
新线程2 82
新线程2 83
新线程2 84
新线程2 85
新线程2 86
新线程2 87
新线程2 88
新线程2 89
新线程1 50
新线程1 51
新线程1 52
新线程1 53
新线程1 54
新线程1 55
新线程1 56
新线程1 57
新线程1 58
新线程1 59
新线程1 60
新线程1 61
新线程1 62
新线程1 63
新线程1 64
新线程1 65
新线程1 66
新线程2 90
新线程2 91
新线程2 92
新线程2 93
新线程2 94
新线程2 95
新线程2 96
新线程2 97
新线程2 98
新线程2 99
main 66
新线程1 67
新线程1 68
新线程1 69
新线程1 70
新线程1 71
新线程1 72
新线程1 73
新线程1 74
新线程1 75
新线程1 76
新线程1 77
新线程1 78
新线程1 79
新线程1 80
新线程1 81
新线程1 82
新线程1 83
新线程1 84
新线程1 85
新线程1 86
新线程1 87
新线程1 88
新线程1 89
新线程1 90
新线程1 91
新线程1 92
新线程1 93
新线程1 94
新线程1 95
新线程1 96
新线程1 97
新线程1 98
新线程1 99
main 67
main 68
main 69
main 70
main 71
main 72
main 73
main 74
main 75
main 76
main 77
main 78
main 79
main 80
main 81
main 82
main 83
main 84
main 85
main 86
main 87
main 88
main 89
main 90
main 91
main 92
main 93
main 94
main 95
main 96
main 97
main 98
main 99

Process finished with exit code 0

 

 

 

3.使用CallableThread的方式创建线程

 

package com.picchealth.hmbms.utils.export;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * Created by zyq on 2020/7/31.
 */
public class CallableThreadTest implements Callable<Integer>{

    @Override
    public Integer call() throws Exception {
        int i=0;
        for (; i <100 ; i++) {
            System.out.println(Thread.currentThread().getName()+" "+i);

        }
        return i;
    }


    public static void main(String[] args) {
        CallableThreadTest ctt=new CallableThreadTest();
        FutureTask<Integer> ft=new FutureTask<Integer>(ctt);
        for (int i = 0; i <100 ; i++) {
            System.out.println(Thread.currentThread().getName()+" 的循环变量i的值是"+i);
            if(i==20){
                new Thread(ft,"有返回值的线程").start();
            }
            
        }
        try{
            System.out.println("子线程的返回值:"+ft.get());
        }catch (InterruptedException e){
           e.printStackTrace();
        }catch (ExecutionException e){
            e.printStackTrace();
        }

    }



}

 

程序的运行结果:

D:\SoftWare\jdk\bin\java "-javaagent:D:\SoftWare\idea\IntelliJ IDEA 2017.1.1\lib\idea_rt.jar=56662:D:\SoftWare\idea\IntelliJ IDEA 2017.1.1\bin" -classpath C:\Users\ZhaoYongqiang\AppData\Local\Temp\classpath.jar -Dfile.encoding=UTF-8 com.picchealth.hmbms.utils.export.CallableThreadTest
main 的循环变量i的值是0
main 的循环变量i的值是1
main 的循环变量i的值是2
main 的循环变量i的值是3
main 的循环变量i的值是4
main 的循环变量i的值是5
main 的循环变量i的值是6
main 的循环变量i的值是7
main 的循环变量i的值是8
main 的循环变量i的值是9
main 的循环变量i的值是10
main 的循环变量i的值是11
main 的循环变量i的值是12
main 的循环变量i的值是13
main 的循环变量i的值是14
main 的循环变量i的值是15
main 的循环变量i的值是16
main 的循环变量i的值是17
main 的循环变量i的值是18
main 的循环变量i的值是19
main 的循环变量i的值是20
main 的循环变量i的值是21
main 的循环变量i的值是22
main 的循环变量i的值是23
main 的循环变量i的值是24
main 的循环变量i的值是25
main 的循环变量i的值是26
main 的循环变量i的值是27
有返回值的线程 0
有返回值的线程 1
有返回值的线程 2
main 的循环变量i的值是28
main 的循环变量i的值是29
有返回值的线程 3
有返回值的线程 4
有返回值的线程 5
有返回值的线程 6
有返回值的线程 7
有返回值的线程 8
有返回值的线程 9
有返回值的线程 10
main 的循环变量i的值是30
main 的循环变量i的值是31
main 的循环变量i的值是32
main 的循环变量i的值是33
main 的循环变量i的值是34
main 的循环变量i的值是35
main 的循环变量i的值是36
main 的循环变量i的值是37
有返回值的线程 11
有返回值的线程 12
有返回值的线程 13
有返回值的线程 14
有返回值的线程 15
有返回值的线程 16
有返回值的线程 17
有返回值的线程 18
有返回值的线程 19
有返回值的线程 20
main 的循环变量i的值是38
main 的循环变量i的值是39
main 的循环变量i的值是40
main 的循环变量i的值是41
main 的循环变量i的值是42
main 的循环变量i的值是43
有返回值的线程 21
有返回值的线程 22
有返回值的线程 23
有返回值的线程 24
有返回值的线程 25
有返回值的线程 26
有返回值的线程 27
有返回值的线程 28
有返回值的线程 29
有返回值的线程 30
有返回值的线程 31
有返回值的线程 32
有返回值的线程 33
有返回值的线程 34
有返回值的线程 35
有返回值的线程 36
有返回值的线程 37
有返回值的线程 38
有返回值的线程 39
有返回值的线程 40
有返回值的线程 41
有返回值的线程 42
有返回值的线程 43
有返回值的线程 44
有返回值的线程 45
有返回值的线程 46
有返回值的线程 47
有返回值的线程 48
有返回值的线程 49
有返回值的线程 50
有返回值的线程 51
有返回值的线程 52
有返回值的线程 53
有返回值的线程 54
有返回值的线程 55
有返回值的线程 56
有返回值的线程 57
有返回值的线程 58
有返回值的线程 59
有返回值的线程 60
有返回值的线程 61
有返回值的线程 62
有返回值的线程 63
有返回值的线程 64
有返回值的线程 65
有返回值的线程 66
有返回值的线程 67
有返回值的线程 68
有返回值的线程 69
有返回值的线程 70
有返回值的线程 71
有返回值的线程 72
有返回值的线程 73
有返回值的线程 74
有返回值的线程 75
main 的循环变量i的值是44
有返回值的线程 76
有返回值的线程 77
有返回值的线程 78
有返回值的线程 79
有返回值的线程 80
main 的循环变量i的值是45
main 的循环变量i的值是46
main 的循环变量i的值是47
main 的循环变量i的值是48
main 的循环变量i的值是49
main 的循环变量i的值是50
main 的循环变量i的值是51
main 的循环变量i的值是52
main 的循环变量i的值是53
main 的循环变量i的值是54
有返回值的线程 81
main 的循环变量i的值是55
main 的循环变量i的值是56
main 的循环变量i的值是57
main 的循环变量i的值是58
main 的循环变量i的值是59
main 的循环变量i的值是60
main 的循环变量i的值是61
main 的循环变量i的值是62
main 的循环变量i的值是63
main 的循环变量i的值是64
main 的循环变量i的值是65
main 的循环变量i的值是66
main 的循环变量i的值是67
main 的循环变量i的值是68
main 的循环变量i的值是69
main 的循环变量i的值是70
main 的循环变量i的值是71
main 的循环变量i的值是72
main 的循环变量i的值是73
main 的循环变量i的值是74
main 的循环变量i的值是75
main 的循环变量i的值是76
main 的循环变量i的值是77
main 的循环变量i的值是78
main 的循环变量i的值是79
main 的循环变量i的值是80
main 的循环变量i的值是81
main 的循环变量i的值是82
main 的循环变量i的值是83
main 的循环变量i的值是84
main 的循环变量i的值是85
main 的循环变量i的值是86
main 的循环变量i的值是87
main 的循环变量i的值是88
有返回值的线程 82
main 的循环变量i的值是89
main 的循环变量i的值是90
main 的循环变量i的值是91
main 的循环变量i的值是92
main 的循环变量i的值是93
main 的循环变量i的值是94
main 的循环变量i的值是95
main 的循环变量i的值是96
main 的循环变量i的值是97
main 的循环变量i的值是98
main 的循环变量i的值是99
有返回值的线程 83
有返回值的线程 84
有返回值的线程 85
有返回值的线程 86
有返回值的线程 87
有返回值的线程 88
有返回值的线程 89
有返回值的线程 90
有返回值的线程 91
有返回值的线程 92
有返回值的线程 93
有返回值的线程 94
有返回值的线程 95
有返回值的线程 96
有返回值的线程 97
有返回值的线程 98
有返回值的线程 99
子线程的返回值:100

Process finished with exit code 0

 

关于在什么情况下使用多线程:一般情况是发送短信或者生成批单的时候,这种在主流程中比较耗费时间的步骤中,我们会使用的比比较多,在其他情况下,不推荐使用多线程。

posted on 2020-07-31 23:00  ~码铃薯~  阅读(52)  评论(0编辑  收藏  举报

导航