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、两者区别与实现方法
实现ThreadMyThread 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
相关文章推荐
- Java中两种多线程实现方法:Thread类和Runnable接口的联系与区别
- Java中继承thread类与实现Runnable接口的区别
- java 继承Thread和实现Runnable的区别
- 【Java并发编程】之六:Runnable和Thread实现多线程的区别(含代码)
- Java中继承thread类与实现Runnable接口的区别(实现线程)
- [原]Java多线程编程学习笔记之五:Runnable和Thread实现多线程的区别(含代码)
- 【转载】JAVA中线程的两种实现方法-实现Runnable接口和继承Thread类
- 【Java并发编程】之六:Runnable和Thread实现多线程的区别(含代码)
- Java中继承thread类与实现Runnable接口的区别
- Java多线程实现接口Runnable和继承Thread区别(建议使用Runnable)
- JAVA笔记 Runnable 和 Thread 实现方式和继承方式的区别
- Java线程之两种方法Runnable和Thread的区别
- [转] Java中继承thread类与实现Runnable接口的区别
- Java传统多线程的实现有两种方法,继承Thread类或者实现Runnable即可.线程启动时调用start()方法.
- JAVA 线程的两种基本实现方法(继承Thread类和实现Runnable接口)
- java线程:用thread与runnable实现的区别
- Java中继承Thread和实现Runnable这两种创建线程有何区别
- [原]Java多线程编程学习笔记之五:Runnable和Thread实现多线程的区别(含代码)
- 【Java基础_(线程篇_第一篇)】继承Thread;实现runnable;sleep、wait用法和区别;Thread和Runnable区别;线程停止
- java多线程编程中实现Runnable接口方法相对于继承Thread方法的优势