您的位置:首页 > 编程语言 > Java开发

java之Runnable和Thread区别与实现方法

2017-07-15 14:14 357 查看

1、多线程中start()和run()方法的区别

1) start:

用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的 start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。

2) run:

run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。

2、两者区别与实现方法

实现Thread

MyThread mt1=new MyThread("线程a");
MyThread mt2=new MyThread("线程b");
mt1.start();
mt2.start();


实现Runnable

Runnable里面没有start方法可以通过Thread类进行启动Runnable多线程

Runnable可以用的同一个对象实例化的,可以资源共享,Thread不可以

MyThread实现runnable接口

MyThread mt=new MyThread();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();


用runnable启动一个线程

Test impelements Runnable;//定义线程类
Test t = new Test();//
//由此行代替前面两行
Runnable t=new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub

}
};

Thread test = new Thread(t);

test.start();


runnable的好处:

避免点继承的局限,一个类可以继承多个接口。

适合于资源的共享

3、卖票例子:

Thread方法实现

package Test1;
class MyThread extends Thread{

private int ticket = 10;
private String name;
public MyThread(String name){
this.name =name;
}

public void run(){
for(int i =0;i<500;i++){
if(this.ticket>0){
System.out.println(this.name+"卖票---->"+(this.ticket--));
}
}
}
}
public class ThreadDemo {

public static void main(String[] args) {
MyThread mt1= new MyThread("一号窗口");
MyThread mt2= new MyThread("二号窗口");
MyThread mt3= new MyThread("三号窗口");
mt1.start();
mt2.start();
mt3.start();
}

}


运行结果



Runnable方法实现

public class Test1 implements Runnable{

private int ticket = 10;

@Override
public  void run() {
for(int i =0;i<10;i++){
//添加同步快
synchronized (this){
if(this.ticket>0){
try {
//通过睡眠线程来模拟出最后一张票的抢票场景
Thread.sleep(100);
System.out.println(Thread.currentThread().getName()+"卖票---->"+(this.ticket--));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}

public static void main(String[] arg){
Test1 t1 = new Test1();
new Thread(t1, "线程1").start();
new Thread(t1, "线程2").start();
}
}


加上synchronized

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐