java多线程学习--售票例子

自己练习写的代码如下

public class Tickets extends Thread {

    //总票数
    private int tick = 100;

    public int getTick() {
        return tick;
    }

    public void setTick(int tick) {
        this.tick = tick;
    }

    public Tickets(String name) {
        super(name);
    }

    public void run() {
        while(true) {
            if(tick>0) {
                System.out.println("售票员:"+currentThread().getName()+"售票中..."
                        +"剩余车票:"+tick--);
            }
        }
    }

}

public class ThreadDemo {

    public static void main(String[] args) {

//      //创建线程
//      Threads t = new Threads("myThread");
//      //开启线程
//      t.start();
//      
//      for(int i = 0;i<40;i++)
//          System.out.println("hello"+i);

        //设置售票员
        Tickets t1 = new Tickets("张三");
        Tickets t2 = new Tickets("李四");
        Tickets t3 = new Tickets("王五");

        //开启线程
        t1.start();
        t2.start();
        t3.start();
    }

}

运行结果

售票员:张三售票中...剩余车票:100
售票员:张三售票中...剩余车票:99
售票员:张三售票中...剩余车票:98
售票员:张三售票中...剩余车票:97
售票员:张三售票中...剩余车票:96
售票员:张三售票中...剩余车票:95
售票员:张三售票中...剩余车票:94
售票员:张三售票中...剩余车票:93
售票员:张三售票中...剩余车票:92
售票员:张三售票中...剩余车票:91
售票员:张三售票中...剩余车票:90
售票员:张三售票中...剩余车票:89
售票员:张三售票中...剩余车票:88
售票员:张三售票中...剩余车票:87
售票员:张三售票中...剩余车票:86
售票员:张三售票中...剩余车票:85
售票员:张三售票中...剩余车票:84
售票员:张三售票中...剩余车票:83
售票员:张三售票中...剩余车票:82
售票员:张三售票中...剩余车票:81
售票员:张三售票中...剩余车票:80
售票员:张三售票中...剩余车票:79
售票员:李四售票中...剩余车票:100
售票员:张三售票中...剩余车票:78
售票员:张三售票中...剩余车票:77
售票员:张三售票中...剩余车票:76
售票员:张三售票中...剩余车票:75
售票员:张三售票中...剩余车票:74
售票员:张三售票中...剩余车票:73
售票员:张三售票中...剩余车票:72
售票员:张三售票中...剩余车票:71
售票员:张三售票中...剩余车票:70
售票员:张三售票中...剩余车票:69
售票员:张三售票中...剩余车票:68
售票员:张三售票中...剩余车票:67
售票员:张三售票中...剩余车票:66
售票员:张三售票中...剩余车票:65
售票员:张三售票中...剩余车票:64
售票员:张三售票中...剩余车票:63
售票员:张三售票中...剩余车票:62
售票员:张三售票中...剩余车票:61
售票员:张三售票中...剩余车票:60
售票员:张三售票中...剩余车票:59
售票员:张三售票中...剩余车票:58
售票员:张三售票中...剩余车票:57
售票员:张三售票中...剩余车票:56
售票员:张三售票中...剩余车票:55
售票员:李四售票中...剩余车票:99
售票员:张三售票中...剩余车票:54
售票员:张三售票中...剩余车票:53
售票员:张三售票中...剩余车票:52
售票员:张三售票中...剩余车票:51
售票员:张三售票中...剩余车票:50
售票员:张三售票中...剩余车票:49
售票员:张三售票中...剩余车票:48
售票员:张三售票中...剩余车票:47
售票员:张三售票中...剩余车票:46
售票员:张三售票中...剩余车票:45
售票员:张三售票中...剩余车票:44
售票员:张三售票中...剩余车票:43
售票员:张三售票中...剩余车票:42
售票员:张三售票中...剩余车票:41
售票员:李四售票中...剩余车票:98
售票员:李四售票中...剩余车票:97
售票员:李四售票中...剩余车票:96
售票员:李四售票中...剩余车票:95
售票员:李四售票中...剩余车票:94
售票员:李四售票中...剩余车票:93
售票员:李四售票中...剩余车票:92
售票员:李四售票中...剩余车票:91
售票员:李四售票中...剩余车票:90
售票员:李四售票中...剩余车票:89
售票员:李四售票中...剩余车票:88
售票员:李四售票中...剩余车票:87
售票员:李四售票中...剩余车票:86
售票员:李四售票中...剩余车票:85
售票员:李四售票中...剩余车票:84
售票员:李四售票中...剩余车票:83
售票员:李四售票中...剩余车票:82
售票员:李四售票中...剩余车票:81
售票员:李四售票中...剩余车票:80
售票员:李四售票中...剩余车票:79
售票员:李四售票中...剩余车票:78
售票员:李四售票中...剩余车票:77
售票员:李四售票中...剩余车票:76
售票员:李四售票中...剩余车票:75
售票员:李四售票中...剩余车票:74
售票员:李四售票中...剩余车票:73
售票员:李四售票中...剩余车票:72
售票员:李四售票中...剩余车票:71
售票员:李四售票中...剩余车票:70
售票员:李四售票中...剩余车票:69
售票员:李四售票中...剩余车票:68
售票员:李四售票中...剩余车票:67
售票员:李四售票中...剩余车票:66
售票员:李四售票中...剩余车票:65
售票员:李四售票中...剩余车票:64
售票员:李四售票中...剩余车票:63
售票员:李四售票中...剩余车票:62
售票员:李四售票中...剩余车票:61
售票员:李四售票中...剩余车票:60
售票员:李四售票中...剩余车票:59
售票员:李四售票中...剩余车票:58
售票员:李四售票中...剩余车票:57
售票员:李四售票中...剩余车票:56
售票员:李四售票中...剩余车票:55
售票员:李四售票中...剩余车票:54
售票员:李四售票中...剩余车票:53
售票员:李四售票中...剩余车票:52
售票员:李四售票中...剩余车票:51
售票员:李四售票中...剩余车票:50
售票员:李四售票中...剩余车票:49
售票员:李四售票中...剩余车票:48
售票员:李四售票中...剩余车票:47
售票员:李四售票中...剩余车票:46
售票员:李四售票中...剩余车票:45
售票员:李四售票中...剩余车票:44
售票员:李四售票中...剩余车票:43
售票员:李四售票中...剩余车票:42
售票员:李四售票中...剩余车票:41
售票员:李四售票中...剩余车票:40
售票员:李四售票中...剩余车票:39
售票员:李四售票中...剩余车票:38
售票员:李四售票中...剩余车票:37
售票员:李四售票中...剩余车票:36
售票员:李四售票中...剩余车票:35
售票员:李四售票中...剩余车票:34
售票员:李四售票中...剩余车票:33
售票员:李四售票中...剩余车票:32
售票员:李四售票中...剩余车票:31
售票员:李四售票中...剩余车票:30
售票员:李四售票中...剩余车票:29
售票员:李四售票中...剩余车票:28
售票员:李四售票中...剩余车票:27
售票员:李四售票中...剩余车票:26
售票员:李四售票中...剩余车票:25
售票员:李四售票中...剩余车票:24
售票员:李四售票中...剩余车票:23
售票员:李四售票中...剩余车票:22
售票员:李四售票中...剩余车票:21
售票员:李四售票中...剩余车票:20
售票员:李四售票中...剩余车票:19
售票员:李四售票中...剩余车票:18
售票员:李四售票中...剩余车票:17
售票员:李四售票中...剩余车票:16
售票员:李四售票中...剩余车票:15
售票员:李四售票中...剩余车票:14
售票员:李四售票中...剩余车票:13
售票员:李四售票中...剩余车票:12
售票员:李四售票中...剩余车票:11
售票员:张三售票中...剩余车票:40
售票员:张三售票中...剩余车票:39
售票员:张三售票中...剩余车票:38
售票员:张三售票中...剩余车票:37
售票员:张三售票中...剩余车票:36
售票员:张三售票中...剩余车票:35
售票员:张三售票中...剩余车票:34
售票员:张三售票中...剩余车票:33
售票员:张三售票中...剩余车票:32
售票员:张三售票中...剩余车票:31
售票员:张三售票中...剩余车票:30
售票员:张三售票中...剩余车票:29
售票员:张三售票中...剩余车票:28
售票员:张三售票中...剩余车票:27
售票员:张三售票中...剩余车票:26
售票员:张三售票中...剩余车票:25
售票员:张三售票中...剩余车票:24
售票员:张三售票中...剩余车票:23
售票员:张三售票中...剩余车票:22
售票员:张三售票中...剩余车票:21
售票员:张三售票中...剩余车票:20
售票员:张三售票中...剩余车票:19
售票员:张三售票中...剩余车票:18
售票员:张三售票中...剩余车票:17
售票员:张三售票中...剩余车票:16
售票员:张三售票中...剩余车票:15
售票员:张三售票中...剩余车票:14
售票员:张三售票中...剩余车票:13
售票员:李四售票中...剩余车票:10
售票员:李四售票中...剩余车票:9
售票员:李四售票中...剩余车票:8
售票员:李四售票中...剩余车票:7
售票员:李四售票中...剩余车票:6
售票员:李四售票中...剩余车票:5
售票员:李四售票中...剩余车票:4
售票员:李四售票中...剩余车票:3
售票员:张三售票中...剩余车票:12
售票员:张三售票中...剩余车票:11
售票员:张三售票中...剩余车票:10
售票员:张三售票中...剩余车票:9
售票员:李四售票中...剩余车票:2
售票员:李四售票中...剩余车票:1
售票员:张三售票中...剩余车票:8
售票员:张三售票中...剩余车票:7
售票员:张三售票中...剩余车票:6
售票员:张三售票中...剩余车票:5
售票员:张三售票中...剩余车票:4
售票员:张三售票中...剩余车票:3
售票员:张三售票中...剩余车票:2
售票员:张三售票中...剩余车票:1
售票员:王五售票中...剩余车票:100
售票员:王五售票中...剩余车票:99
售票员:王五售票中...剩余车票:98
售票员:王五售票中...剩余车票:97
售票员:王五售票中...剩余车票:96
售票员:王五售票中...剩余车票:95
售票员:王五售票中...剩余车票:94
售票员:王五售票中...剩余车票:93
售票员:王五售票中...剩余车票:92
售票员:王五售票中...剩余车票:91
售票员:王五售票中...剩余车票:90
售票员:王五售票中...剩余车票:89
售票员:王五售票中...剩余车票:88
售票员:王五售票中...剩余车票:87
售票员:王五售票中...剩余车票:86
售票员:王五售票中...剩余车票:85
售票员:王五售票中...剩余车票:84
售票员:王五售票中...剩余车票:83
售票员:王五售票中...剩余车票:82
售票员:王五售票中...剩余车票:81
售票员:王五售票中...剩余车票:80
售票员:王五售票中...剩余车票:79
售票员:王五售票中...剩余车票:78
售票员:王五售票中...剩余车票:77
售票员:王五售票中...剩余车票:76
售票员:王五售票中...剩余车票:75
售票员:王五售票中...剩余车票:74
售票员:王五售票中...剩余车票:73
售票员:王五售票中...剩余车票:72
售票员:王五售票中...剩余车票:71
售票员:王五售票中...剩余车票:70
售票员:王五售票中...剩余车票:69
售票员:王五售票中...剩余车票:68
售票员:王五售票中...剩余车票:67
售票员:王五售票中...剩余车票:66
售票员:王五售票中...剩余车票:65
售票员:王五售票中...剩余车票:64
售票员:王五售票中...剩余车票:63
售票员:王五售票中...剩余车票:62
售票员:王五售票中...剩余车票:61
售票员:王五售票中...剩余车票:60
售票员:王五售票中...剩余车票:59
售票员:王五售票中...剩余车票:58
售票员:王五售票中...剩余车票:57
售票员:王五售票中...剩余车票:56
售票员:王五售票中...剩余车票:55
售票员:王五售票中...剩余车票:54
售票员:王五售票中...剩余车票:53
售票员:王五售票中...剩余车票:52
售票员:王五售票中...剩余车票:51
售票员:王五售票中...剩余车票:50
售票员:王五售票中...剩余车票:49
售票员:王五售票中...剩余车票:48
售票员:王五售票中...剩余车票:47
售票员:王五售票中...剩余车票:46
售票员:王五售票中...剩余车票:45
售票员:王五售票中...剩余车票:44
售票员:王五售票中...剩余车票:43
售票员:王五售票中...剩余车票:42
售票员:王五售票中...剩余车票:41
售票员:王五售票中...剩余车票:40
售票员:王五售票中...剩余车票:39
售票员:王五售票中...剩余车票:38
售票员:王五售票中...剩余车票:37
售票员:王五售票中...剩余车票:36
售票员:王五售票中...剩余车票:35
售票员:王五售票中...剩余车票:34
售票员:王五售票中...剩余车票:33
售票员:王五售票中...剩余车票:32
售票员:王五售票中...剩余车票:31
售票员:王五售票中...剩余车票:30
售票员:王五售票中...剩余车票:29
售票员:王五售票中...剩余车票:28
售票员:王五售票中...剩余车票:27
售票员:王五售票中...剩余车票:26
售票员:王五售票中...剩余车票:25
售票员:王五售票中...剩余车票:24
售票员:王五售票中...剩余车票:23
售票员:王五售票中...剩余车票:22
售票员:王五售票中...剩余车票:21
售票员:王五售票中...剩余车票:20
售票员:王五售票中...剩余车票:19
售票员:王五售票中...剩余车票:18
售票员:王五售票中...剩余车票:17
售票员:王五售票中...剩余车票:16
售票员:王五售票中...剩余车票:15
售票员:王五售票中...剩余车票:14
售票员:王五售票中...剩余车票:13
售票员:王五售票中...剩余车票:12
售票员:王五售票中...剩余车票:11
售票员:王五售票中...剩余车票:10
售票员:王五售票中...剩余车票:9
售票员:王五售票中...剩余车票:8
售票员:王五售票中...剩余车票:7
售票员:王五售票中...剩余车票:6
售票员:王五售票中...剩余车票:5
售票员:王五售票中...剩余车票:4
售票员:王五售票中...剩余车票:3
售票员:王五售票中...剩余车票:2
售票员:王五售票中...剩余车票:1

问题在于,每张票都被卖了3次.也就是这三个线程并没有共享总票数,而是单独的售完各自的100张票,这显然是不符合常理的.

解决方法,将变量tick设置为static即可,静态变量随着类的加载而执行,而且只执行一次,这样就可以使三个售票员共享100张车票了

    //总票数
    private static int tick = 100;

更新程序后执行结果

售票员:张三售票中...剩余车票:100
售票员:张三售票中...剩余车票:98
售票员:张三售票中...剩余车票:97
售票员:张三售票中...剩余车票:96
售票员:李四售票中...剩余车票:99
售票员:张三售票中...剩余车票:95
售票员:李四售票中...剩余车票:94
售票员:李四售票中...剩余车票:92
售票员:李四售票中...剩余车票:91
售票员:李四售票中...剩余车票:90
售票员:李四售票中...剩余车票:89
售票员:张三售票中...剩余车票:93
售票员:张三售票中...剩余车票:87
售票员:张三售票中...剩余车票:86
售票员:张三售票中...剩余车票:85
售票员:张三售票中...剩余车票:84
售票员:张三售票中...剩余车票:83
售票员:张三售票中...剩余车票:82
售票员:李四售票中...剩余车票:88
售票员:张三售票中...剩余车票:81
售票员:李四售票中...剩余车票:80
售票员:张三售票中...剩余车票:79
售票员:李四售票中...剩余车票:78
售票员:张三售票中...剩余车票:77
售票员:张三售票中...剩余车票:75
售票员:张三售票中...剩余车票:74
售票员:张三售票中...剩余车票:73
售票员:张三售票中...剩余车票:72
售票员:张三售票中...剩余车票:71
售票员:张三售票中...剩余车票:70
售票员:张三售票中...剩余车票:69
售票员:张三售票中...剩余车票:68
售票员:张三售票中...剩余车票:67
售票员:张三售票中...剩余车票:66
售票员:张三售票中...剩余车票:65
售票员:张三售票中...剩余车票:64
售票员:张三售票中...剩余车票:63
售票员:张三售票中...剩余车票:62
售票员:张三售票中...剩余车票:61
售票员:张三售票中...剩余车票:60
售票员:张三售票中...剩余车票:59
售票员:张三售票中...剩余车票:58
售票员:张三售票中...剩余车票:57
售票员:张三售票中...剩余车票:56
售票员:张三售票中...剩余车票:55
售票员:张三售票中...剩余车票:54
售票员:李四售票中...剩余车票:76
售票员:张三售票中...剩余车票:53
售票员:李四售票中...剩余车票:52
售票员:张三售票中...剩余车票:51
售票员:李四售票中...剩余车票:50
售票员:张三售票中...剩余车票:49
售票员:李四售票中...剩余车票:48
售票员:张三售票中...剩余车票:47
售票员:李四售票中...剩余车票:46
售票员:李四售票中...剩余车票:44
售票员:李四售票中...剩余车票:43
售票员:李四售票中...剩余车票:42
售票员:李四售票中...剩余车票:41
售票员:李四售票中...剩余车票:40
售票员:李四售票中...剩余车票:39
售票员:李四售票中...剩余车票:38
售票员:李四售票中...剩余车票:37
售票员:李四售票中...剩余车票:36
售票员:李四售票中...剩余车票:35
售票员:李四售票中...剩余车票:34
售票员:李四售票中...剩余车票:33
售票员:李四售票中...剩余车票:32
售票员:李四售票中...剩余车票:31
售票员:李四售票中...剩余车票:30
售票员:李四售票中...剩余车票:29
售票员:李四售票中...剩余车票:28
售票员:李四售票中...剩余车票:27
售票员:张三售票中...剩余车票:45
售票员:张三售票中...剩余车票:25
售票员:张三售票中...剩余车票:24
售票员:张三售票中...剩余车票:23
售票员:张三售票中...剩余车票:22
售票员:张三售票中...剩余车票:21
售票员:张三售票中...剩余车票:20
售票员:张三售票中...剩余车票:19
售票员:张三售票中...剩余车票:18
售票员:张三售票中...剩余车票:17
售票员:张三售票中...剩余车票:16
售票员:李四售票中...剩余车票:26
售票员:李四售票中...剩余车票:14
售票员:李四售票中...剩余车票:13
售票员:李四售票中...剩余车票:12
售票员:李四售票中...剩余车票:11
售票员:李四售票中...剩余车票:10
售票员:李四售票中...剩余车票:9
售票员:李四售票中...剩余车票:8
售票员:李四售票中...剩余车票:7
售票员:李四售票中...剩余车票:6
售票员:李四售票中...剩余车票:5
售票员:李四售票中...剩余车票:4
售票员:李四售票中...剩余车票:3
售票员:李四售票中...剩余车票:2
售票员:李四售票中...剩余车票:1
售票员:张三售票中...剩余车票:15

完美解决,但是,static变量存活时间太长,一般不用static修饰变量

另一种解决方法,实现runnable接口,覆盖runnable中的run方法
Thread类中有一个Thread(Runnable runnable)的构造方法 ,线程在runnable对象中寻找run方法
在创建线程时,将runnable类对象传入给Thread类即可
实现代码

public class Tickets implements Runnable /*extends Thread*/ {

    //总票数
    private static int tick = 100;


    public void run() {
        while(true) {
            if(tick>0) {
                System.out.println("售票员:"+Thread.currentThread().getName()+",售票中..."
                        +"剩余车票:"+--tick);
            }
        }
    }

}

public class ThreadDemo {

    public static void main(String[] args) {

//      //创建线程
//      Threads t = new Threads("myThread");
//      //开启线程
//      t.start();
//      
//      for(int i = 0;i<40;i++)
//          System.out.println("hello"+i);

        //设置售票员
//      Tickets t1 = new Tickets("张三");
//      Tickets t2 = new Tickets("李四");
//      Tickets t3 = new Tickets("王五");

        //开启线程
//      t1.start();
//      t2.start();
//      t3.start();

        //run方法
        Tickets t = new Tickets();

        //创建线程
        Thread t1 = new Thread(t,"张三"); //创建一个线程
        Thread t2 = new Thread(t,"李四"); //创建一个线程
        Thread t3 = new Thread(t,"王五"); //创建一个线程

        //开启线程
        t1.start();
        t2.start();
        t3.start();
    }

}

运行结果

售票员:张三,售票中...剩余车票:99
售票员:张三,售票中...剩余车票:98
售票员:张三,售票中...剩余车票:97
售票员:张三,售票中...剩余车票:96
售票员:张三,售票中...剩余车票:95
售票员:张三,售票中...剩余车票:94
售票员:张三,售票中...剩余车票:93
售票员:张三,售票中...剩余车票:92
售票员:张三,售票中...剩余车票:91
售票员:张三,售票中...剩余车票:90
售票员:张三,售票中...剩余车票:89
售票员:李四,售票中...剩余车票:88
售票员:李四,售票中...剩余车票:86
售票员:李四,售票中...剩余车票:85
售票员:李四,售票中...剩余车票:84
售票员:李四,售票中...剩余车票:83
售票员:李四,售票中...剩余车票:82
售票员:李四,售票中...剩余车票:81
售票员:李四,售票中...剩余车票:80
售票员:李四,售票中...剩余车票:79
售票员:李四,售票中...剩余车票:78
售票员:李四,售票中...剩余车票:77
售票员:李四,售票中...剩余车票:76
售票员:李四,售票中...剩余车票:75
售票员:李四,售票中...剩余车票:74
售票员:李四,售票中...剩余车票:73
售票员:李四,售票中...剩余车票:72
售票员:李四,售票中...剩余车票:71
售票员:李四,售票中...剩余车票:70
售票员:李四,售票中...剩余车票:69
售票员:李四,售票中...剩余车票:68
售票员:李四,售票中...剩余车票:67
售票员:李四,售票中...剩余车票:66
售票员:李四,售票中...剩余车票:65
售票员:李四,售票中...剩余车票:64
售票员:李四,售票中...剩余车票:63
售票员:李四,售票中...剩余车票:62
售票员:李四,售票中...剩余车票:61
售票员:李四,售票中...剩余车票:60
售票员:李四,售票中...剩余车票:59
售票员:李四,售票中...剩余车票:58
售票员:李四,售票中...剩余车票:57
售票员:李四,售票中...剩余车票:56
售票员:李四,售票中...剩余车票:55
售票员:李四,售票中...剩余车票:54
售票员:李四,售票中...剩余车票:53
售票员:李四,售票中...剩余车票:52
售票员:李四,售票中...剩余车票:51
售票员:李四,售票中...剩余车票:50
售票员:李四,售票中...剩余车票:49
售票员:李四,售票中...剩余车票:48
售票员:李四,售票中...剩余车票:47
售票员:李四,售票中...剩余车票:46
售票员:李四,售票中...剩余车票:45
售票员:李四,售票中...剩余车票:44
售票员:李四,售票中...剩余车票:43
售票员:李四,售票中...剩余车票:41
售票员:李四,售票中...剩余车票:40
售票员:李四,售票中...剩余车票:39
售票员:李四,售票中...剩余车票:38
售票员:李四,售票中...剩余车票:37
售票员:李四,售票中...剩余车票:36
售票员:李四,售票中...剩余车票:35
售票员:李四,售票中...剩余车票:34
售票员:李四,售票中...剩余车票:33
售票员:李四,售票中...剩余车票:32
售票员:李四,售票中...剩余车票:31
售票员:李四,售票中...剩余车票:30
售票员:李四,售票中...剩余车票:29
售票员:李四,售票中...剩余车票:28
售票员:李四,售票中...剩余车票:27
售票员:李四,售票中...剩余车票:26
售票员:李四,售票中...剩余车票:25
售票员:李四,售票中...剩余车票:24
售票员:李四,售票中...剩余车票:23
售票员:李四,售票中...剩余车票:22
售票员:李四,售票中...剩余车票:21
售票员:王五,售票中...剩余车票:87
售票员:王五,售票中...剩余车票:20
售票员:王五,售票中...剩余车票:19
售票员:王五,售票中...剩余车票:18
售票员:王五,售票中...剩余车票:17
售票员:王五,售票中...剩余车票:16
售票员:王五,售票中...剩余车票:15
售票员:王五,售票中...剩余车票:14
售票员:王五,售票中...剩余车票:13
售票员:王五,售票中...剩余车票:12
售票员:王五,售票中...剩余车票:11
售票员:王五,售票中...剩余车票:10
售票员:王五,售票中...剩余车票:9
售票员:王五,售票中...剩余车票:8
售票员:王五,售票中...剩余车票:7
售票员:王五,售票中...剩余车票:5
售票员:王五,售票中...剩余车票:4
售票员:王五,售票中...剩余车票:3
售票员:王五,售票中...剩余车票:2
售票员:王五,售票中...剩余车票:1
售票员:王五,售票中...剩余车票:0
售票员:张三,售票中...剩余车票:42
售票员:李四,售票中...剩余车票:6

总结

多线程的创建方式有两种
继承方式和实现方式
两者区别在于,线程执行部分存放的位置不同

猜你喜欢

转载自blog.csdn.net/fly_fly_fly_pig/article/details/81097857
今日推荐