基础篇-Thread线程的使用

很久没写教程了,捡起笔杆,一切重来;

来做个简单测试:

实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口。 

继承Thread

class Hello extends Thread{
	private String name;
	
	Hello(String name){
		this.name = name;
	}
	
	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println(name+" ___打个招呼,次序:"+i);
		}
	}
}

测试类:

public class ThreadTest {
	public static void main(String[] args) {
		Hello temp = new Hello("大神");
		Hello temp2 = new Hello("bruce");
		temp.start();
		temp2.start();
	}
}

结果显示 : 

120628_5b8J_1995134.png

注意:方法执行调用start() ,调用run()是错误的,没有效果的; (虽然调用的是start()方法,但是实际上调用的还是run()方法的主体)

实现runable接口版

class RunableHello implements Runnable{
	private String name;
	
	RunableHello(String name){
		this.name = name;
	}
	
	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println(name+" ___打个招呼,次序:"+i);
		}
	}
}
class TheadPool{
	public static void runMethod(Runnable temp){
		Thread thread=new Thread(temp);
		thread.start();
	}
}

测试类:

public class ThreadTest {
	public static void main(String[] args) {
		RunableHello temp = new RunableHello("大神");
		RunableHello temp2 = new RunableHello("bruce");
		TheadPool.runMethod(temp);
		TheadPool.runMethod(temp2);
	}
}

结果显示:

121704_EcQK_1995134.png

那么区别在哪呢?

Thread和Runnable的区别:

如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。(实验证明,结果并不成立,没区别,可能数据量太小,也不知道谁出的这个结论,有疑问的,欢迎留言)

这里用网络售票系统做演示,比如我们有N多个窗口买票,单票数有限, 代码如下:

网络售票系统测试

继承版Thread窗口类:

class OrderWindows extends Thread{
	private int order = 10;
	private String name;
	
	OrderWindows(String name){
		this.name = name;
	}
	@Override
	public void run() {
		for (int i = 0; i < 20; i++) {
			if(order>0){
				System.out.println(name+"售票"+order+"成功;");
				// 每次成功递减
				order--;
			}
		}
	}
}

测试类:

public static void main(String[] args) {
		OrderWindows orderWindows = new OrderWindows("窗口小华");
		OrderWindows orderWindows2 = new OrderWindows("窗口小丽");
		OrderWindows orderWindows3 = new OrderWindows("窗口小吴");
		orderWindows.start();
		orderWindows2.start();
		orderWindows3.start();
	}

运行结果:

123236_3egO_1995134.png

显示: 每个窗口都去循环了10次,并把重复的票买了出去,无法做到线程内数据共享;

 接口版Runable窗口类:

class RunableOrderWindows implements Runnable{
	private int order = 10;
	@Override
	public void run() {
		for (int i = 0; i < 20; i++) {
			if(order>0){
				System.out.println(Thread.currentThread().getName()+"售票"+order+"成功;");
				// 每次成功递减
				order--;
			}
		}
	}
}

测试代码

public class ThreadTest {
	
	
	public static void main(String[] args) throws InterruptedException {
		RunableOrderWindows orderWindows = new RunableOrderWindows(); 
		 
		new Thread(orderWindows, "丽丽").start();
		new Thread(orderWindows, "小华").start();
        new Thread(orderWindows, "介音").start();
	}
}

结果显示

125431_o2Zh_1995134.png

 结果显示,还是会出现2个窗口同时卖出一样的票,结果好像没啥区别;

可怕,欢迎有提问,提问,搞不懂啊;

 

 

 

 

转载于:https://my.oschina.net/java1314/blog/915423

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值