Java两种方式实现多线程对比

本文通过三个示例探讨了Java中线程的创建及使用Runnable接口的优势,包括资源共享、避免单继承限制以及提高代码健壮性等方面。

模拟售票

结论:一个对象只能启动一个线程,无论你调用多少遍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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值