java中实现多线程的两种方法的区别


java中实现多线程的两种方法:

1.自定义类继承Thread类

class TestThread extends Thread{
	public void run(){
		//线程处理代码
	}
}

 

启动线程:

TestThread tt = new TestThread();
tt.start();//start函数中会调用run()方法
tt.start();//不要以为这样就是开启了两个线程,这句代码无用,一个Thread对象是一个线程

2.自定义类实现Runable接口

class TestThread implements Runable{
	public void run(){
		//线程处理代码
	}
}
启动线程:

TestThread tt = new TestThread();
new Thread(tt).start();//启动第一个线程,Runable的对象作为参数传给Thread
new Thread(tt).start();//启动第二个线程

这两种实现多线程的方式有什么不同?

1.java是不允许多继承的,如果TestThread本来已继承了一个类,是不能再继承Thread的;然而实现Runable借口则没有这个问题。

2.如果多个线程要对统一资源进行处理(如:两个售票点同时卖票)。即TestThread中有一成员变量(剩余票数),先要启用两个线程(售票点)对100张tickets进行售票.(售票功能在run()中实现,tickets--)

private int tickets = 100;//票数

采用第一种方法:启动两个线程则要new两个TestThread

TestThread saler1 = new TestThread();
saler1.start();
TestThread saler2 = new TestThread();
saler2.start();
saler1和saler2中的tickets是不同的两个变量,即两个售票点分别售自己的100张票,总共售了200张票。

采用第二种方法:

TestThread tt = new TestThread();
Thread saler1 = new Thread(tt);
saler1.start();
Thread saler2 = new Thread(tt);
saler2.start();
saler1和saler2这两个线程同时在卖tt中的100张票。


一般建议用Runable。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值