自己练习写的代码如下
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
总结
多线程的创建方式有两种
继承方式和实现方式
两者区别在于,线程执行部分存放的位置不同