马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 可爱的静静 于 2017-8-18 00:26 编辑
多线程 Runable接口
创建线程有两种方式:
1. 继承Thread类并覆盖run方法 2. 实现接口Runnable
第二种方式是(实现Runnable接口)
实现接口步骤:
1. 定义类实现接口
2. 覆盖Runnable 接口中的run方法(也是把创建好的线程想要执行的代码放在run)
3. 通过Thread类创建线程对象
4. 将Runnable接口的子类对象作为实际参数传递给Thread类的构造方法
实现Runnable接口的子类对象传递给Thread类的结构方法,让Thread类去执行指定对象的run方法
这个结构方法是
Thread(Runnable target)
分配新的 Thread 对象。
5.调用Thread类的start方法开启线程并调用Runnable接口子类的run 方法
//定义类实现接口并且覆盖run方法
例子:售票系统package UI;
import java.lang.Thread;
public class sport {
public static void main(String[] args) {
Ticket t=new Ticket();
Thread a=new Thread();
a. start();
Thread b=new Thread(t);
b. start();
Thread c=new Thread(t);
c. start();
}
}
class Ticket implements Runnable//实现接口 原来的方法是class Ticket extends Thread
{
private int ticket=100;
public void run(){
while(true){
if(ticket>0)
System.out.println(Thread.currentThread().getName()+"…sale:"+ticket--);
}
}
}
Thread a=new Thread(); a.start () 这个只是启动了Thread的run方法是:
void run()
如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。
所以没有输出什么
因为Thread类有个结构方法:
Thread(Runnable target)
分配新的 Thread 对象。
所以可以把 实现Runnable接口的子类对象传递给Thread类的结构方法,让Thread类去执行指定对象的run方法
如果是方法一继承Thread这个方法的话代码是这样的package UI;
import java.lang.Thread;
public class sport {
public static void main(String[] args) {
Ticket a=new Ticket();
a. start();
Ticket b=new Ticket();
b. start();
}
}
class Ticket extends Thread
{
private int ticket=100;
public void run(){
while(true){
if(ticket>0)
System.out.println(Thread.currentThread().getName()+"…sale:"+ticket--);
}
}
}
方法一和方法二的区别:
1. 实现方式是可以实现接口还可以继承其他类,但是继承Thread就不能继承其他类
避免了单继承的局限性,多数用实现Runnable
例如:看图1和图二 hahahah
2. 存放方式不同
用Thread 实现的代码存放在 Thread类的子类run方法中
实现Runnable实现的代码存放在 Runnable 接口的子类方法中
Thread类其实也实现了Runnable接口 就业是为了确定把实现代码存在run方法中
上面的两个代码都是买票系统,然后输出卖到第几张,两个代码执行后 不同的是同样式售票的 而且初始值都是100 但是结果是
实现Runnable 即使是开启多条线程一起卖票的,但只卖出100
继承Thread 方式的是 多条线程一起卖 ,卖出的票一共是200
因为 实现Runnable方法只传了一个对象t 继承Thread只有两个对象,两个对象都有ticket=100
|