多线程

1、实现Runnable接口创建线程

public class RunnableDemo implements Runnable{
    private Thread t;
    private String threadName;

    public RunnableDemo(String threadName){
        this.threadName=threadName;
        System.out.println("Creating + "+threadName);
    }

    @Override
    public void run() {
        System.out.println("Running + "+threadName);
        try {
            for (int i=4;i>0;i--){
                System.out.println("Thread + "+threadName+","+i);
                Thread.sleep(50);
            }
        }catch (InterruptedException e){
            System.out.println("Thread + "+threadName+"interrupted.");
        }
        System.out.println("Thread +"+threadName+"exiting.");
    }

    public void start(){
        System.out.println("Starting +"+threadName);
        if (t==null){
            t=new Thread(this,threadName);
            t.start();
        }
    }
}

public class TestThread {

    public static void main(String[] args) {
        RunnableDemo r1=new RunnableDemo("Thread-1");
        r1.start();

        RunnableDemo r2=new RunnableDemo("Thread-2");
        r2.start();
    }
}

输出结果:

Creating + Thread-1
Starting +Thread-1
Creating + Thread-2
Starting +Thread-2
Running + Thread-1
Thread + Thread-1,4
Running + Thread-2
Thread + Thread-2,4
Thread + Thread-1,3
Thread + Thread-2,3
Thread + Thread-1,2
Thread + Thread-2,2
Thread + Thread-1,1
Thread +Thread-1exiting.
Thread + Thread-2,1
Thread +Thread-2exiting.

2、继承Thread类创建线程

public class ThreadDemo extends Thread{
    private Thread t;
    private String threadName;

    public ThreadDemo(String threadName){
        this.threadName=threadName;
        System.out.println("Creating + "+threadName);
    }
    @Override
    public void run(){
        System.out.println("Running + "+threadName);
        try {
            for (int i=4;i>0;i--){
                System.out.println("Thread + "+threadName+","+i);
                Thread.sleep(50);
            }
        }catch (Exception e){
            System.out.println("Thread + "+threadName+" interrupter.");
        }
        System.out.println("Thread + "+threadName+" exiting.");
    }

    public void start(){
        System.out.println("Starting + "+threadName);
        if (t==null){
            t=new Thread(this,threadName);
            t.start();
        }
    }
}


public class TestThread {

    public static void main(String[] args) {
        ThreadDemo t1=new ThreadDemo("Thread-1");
        t1.start();

        ThreadDemo t2=new ThreadDemo("Thread-2");
        t2.start();
    }
}

输出结果:

Creating + Thread-1
Starting + Thread-1
Creating + Thread-2
Starting + Thread-2
Running + Thread-2
Thread + Thread-2,4
Running + Thread-1
Thread + Thread-1,4
Thread + Thread-2,3
Thread + Thread-1,3
Thread + Thread-2,2
Thread + Thread-1,2
Thread + Thread-2,1
Thread + Thread-1,1
Thread + Thread-2 exiting.
Thread + Thread-1 exiting.

3、通过 Callable 和 Future 创建线程

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();
        }
    }
}

输出结果:

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
main 的循环变量i的值28
main 的循环变量i的值29
main 的循环变量i的值30
main 的循环变量i的值31
main 的循环变量i的值32
main 的循环变量i的值33
main 的循环变量i的值34
main 的循环变量i的值35
main 的循环变量i的值36
main 的循环变量i的值37
main 的循环变量i的值38
main 的循环变量i的值39
main 的循环变量i的值40
main 的循环变量i的值41
main 的循环变量i的值42
main 的循环变量i的值43
main 的循环变量i的值44
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
main 的循环变量i的值55
main 的循环变量i的值56
有返回值的线程 0
有返回值的线程 1
有返回值的线程 2
有返回值的线程 3
有返回值的线程 4
有返回值的线程 5
有返回值的线程 6
有返回值的线程 7
有返回值的线程 8
有返回值的线程 9
有返回值的线程 10
有返回值的线程 11
有返回值的线程 12
有返回值的线程 13
有返回值的线程 14
有返回值的线程 15
有返回值的线程 16
有返回值的线程 17
有返回值的线程 18
有返回值的线程 19
有返回值的线程 20
有返回值的线程 21
有返回值的线程 22
有返回值的线程 23
有返回值的线程 24
有返回值的线程 25
有返回值的线程 26
有返回值的线程 27
有返回值的线程 28
有返回值的线程 29
有返回值的线程 30
有返回值的线程 31
main 的循环变量i的值57
有返回值的线程 32
main 的循环变量i的值58
有返回值的线程 33
main 的循环变量i的值59
有返回值的线程 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
有返回值的线程 76
有返回值的线程 77
有返回值的线程 78
有返回值的线程 79
有返回值的线程 80
有返回值的线程 81
有返回值的线程 82
有返回值的线程 83
有返回值的线程 84
有返回值的线程 85
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
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
有返回值的线程 86
有返回值的线程 87
有返回值的线程 88
有返回值的线程 89
有返回值的线程 90
有返回值的线程 91
有返回值的线程 92
有返回值的线程 93
有返回值的线程 94
有返回值的线程 95
有返回值的线程 96
有返回值的线程 97
有返回值的线程 98
有返回值的线程 99
子线程的返回值:100
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值