模拟售票
结论:一个对象只能启动一个线程,无论你调用多少遍start()方法,结果只有一个线程
示例一
package myk;
public class ThreadDemo1 {
public static void main(String[] args) {
TestThread tt = new TestThread();
tt.start();
tt.start();
tt.start();
tt.start();
tt.start();
}
}
class TestThread extends Thread{
private int tickets = 10;
public void run(){
while(true){
if(tickets>0){
System.out.println(Thread.currentThread().getName()+" is sailing ticket " + tickets--);
}
}
}
}
//result
//Thread-0 is sailing ticket 10
//Thread-0 is sailing ticket 9
//Thread-0 is sailing ticket 8
//Thread-0 is sailing ticket 7
//Thread-0 is sailing ticket 6
//Thread-0 is sailing ticket 5
//Thread-0 is sailing ticket 4
//Thread-0 is sailing ticket 3
//Thread-0 is sailing ticket 2
//Thread-0 is sailing ticket 1
示例二
结论:四个线程分别卖各自的10张票,不是卖共同的10张票
public class ThreadDemo1 {
public static void main(String[] args) {
new TestThread().start();
new TestThread().start();
new TestThread().start();
new TestThread().start();
new TestThread().start();
}
}
class TestThread extends Thread{
private int tickets = 10;
public void run(){
while(true){
if(tickets>0){
System.out.println(Thread.currentThread().getName()+" is sailing ticket " + tickets--);
}
}
}
}
//result
//Thread-0 is sailing ticket 1
//Thread-1 is sailing ticket 10
//Thread-1 is sailing ticket 9
//Thread-1 is sailing ticket 8
//Thread-1 is sailing ticket 7
//Thread-1 is sailing ticket 6
//Thread-1 is sailing ticket 5
//Thread-1 is sailing ticket 4
//Thread-1 is sailing ticket 3
//Thread-2 is sailing ticket 10
//Thread-3 is sailing ticket 10
//Thread-4 is sailing ticket 10
//Thread-1 is sailing ticket 2
示例三
结论:
使用runnable有以下好处
1.适合多个相同程序代码的线程去处理同一资源的情况。
2.可以避免由于java的单继承性带来的局限性。
3.有利于程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。
public class ThreadDemo1 {
public static void main(String[] args) {
TestThread tt = new TestThread();
new Thread(tt).start();
new Thread(tt).start();
new Thread(tt).start();
new Thread(tt).start();
new Thread(tt).start();
}
}
class TestThread implements Runnable{
private int tickets = 100;
public void run(){
while(true){
if(tickets>0){
System.out.println(Thread.currentThread().getName()+" is sailing ticket " + tickets--);
}
}
}
}
//result
//Thread-0 is sailing ticket 100
//Thread-0 is sailing ticket 99
//Thread-0 is sailing ticket 98
//Thread-0 is sailing ticket 97
//Thread-0 is sailing ticket 96
//Thread-0 is sailing ticket 95
//Thread-0 is sailing ticket 94
//Thread-0 is sailing ticket 93
//Thread-0 is sailing ticket 92
//Thread-0 is sailing ticket 91
//Thread-0 is sailing ticket 90
//Thread-0 is sailing ticket 89
//Thread-0 is sailing ticket 88
//Thread-0 is sailing ticket 87
//Thread-0 is sailing ticket 86
//Thread-0 is sailing ticket 85
//Thread-0 is sailing ticket 84
//Thread-1 is sailing ticket 83
//Thread-2 is sailing ticket 82
//Thread-3 is sailing ticket 81
//Thread-4 is sailing ticket 80
//Thread-0 is sailing ticket 79
//Thread-1 is sailing ticket 78
//Thread-2 is sailing ticket 77
//Thread-3 is sailing ticket 76
//Thread-4 is sailing ticket 75
//Thread-0 is sailing ticket 74
//Thread-1 is sailing ticket 73
//Thread-2 is sailing ticket 72
//Thread-3 is sailing ticket 71
//Thread-4 is sailing ticket 70
//Thread-0 is sailing ticket 69
//Thread-1 is sailing ticket 68
//Thread-2 is sailing ticket 67
//Thread-3 is sailing ticket 66
//Thread-4 is sailing ticket 65
//Thread-0 is sailing ticket 64
//Thread-1 is sailing ticket 63
//Thread-2 is sailing ticket 62
//Thread-3 is sailing ticket 61
//Thread-4 is sailing ticket 60
//Thread-0 is sailing ticket 59
//Thread-1 is sailing ticket 58
//Thread-2 is sailing ticket 57
//Thread-3 is sailing ticket 56
//Thread-0 is sailing ticket 55
//Thread-1 is sailing ticket 54
//Thread-2 is sailing ticket 53
//Thread-3 is sailing ticket 52
//Thread-0 is sailing ticket 51
//Thread-1 is sailing ticket 50
//Thread-2 is sailing ticket 49
//Thread-4 is sailing ticket 48
//Thread-3 is sailing ticket 47
//Thread-0 is sailing ticket 46
//Thread-1 is sailing ticket 45
//Thread-2 is sailing ticket 44
//Thread-4 is sailing ticket 43
//Thread-3 is sailing ticket 42
//Thread-0 is sailing ticket 41
//Thread-1 is sailing ticket 40
//Thread-2 is sailing ticket 39
//Thread-4 is sailing ticket 38
//Thread-3 is sailing ticket 37
//Thread-0 is sailing ticket 36
//Thread-1 is sailing ticket 35
//Thread-2 is sailing ticket 34
//Thread-4 is sailing ticket 33
//Thread-3 is sailing ticket 32
//Thread-0 is sailing ticket 31
//Thread-1 is sailing ticket 30
//Thread-4 is sailing ticket 29
//Thread-3 is sailing ticket 28
//Thread-0 is sailing ticket 27
//Thread-1 is sailing ticket 26
//Thread-4 is sailing ticket 25
//Thread-3 is sailing ticket 24
//Thread-0 is sailing ticket 23
//Thread-1 is sailing ticket 22
//Thread-2 is sailing ticket 21
//Thread-3 is sailing ticket 20
//Thread-0 is sailing ticket 19
//Thread-1 is sailing ticket 18
//Thread-2 is sailing ticket 17
//Thread-3 is sailing ticket 16
//Thread-0 is sailing ticket 15
//Thread-4 is sailing ticket 14
//Thread-2 is sailing ticket 13
//Thread-3 is sailing ticket 12
//Thread-0 is sailing ticket 11
//Thread-4 is sailing ticket 10
//Thread-2 is sailing ticket 9
//Thread-1 is sailing ticket 8
//Thread-3 is sailing ticket 7
//Thread-4 is sailing ticket 6
//Thread-2 is sailing ticket 5
//Thread-1 is sailing ticket 4
//Thread-3 is sailing ticket 3
//Thread-4 is sailing ticket 2
//Thread-2 is sailing ticket 1