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。