Java学习从菜鸟变大鸟之三 多线程中Thread 和Runnable的区别与运用
2014-02-13 20:57
731 查看
多线程机制是java中的一个特点,掌握它对后面的知识的理解至关重要,是java工程师的必备知识,多线程指在单个程序中可以运行多个不同的线程执行的不同的任务,线程是一个程序内部的顺序控制流。进程是静态的概念,线程是动态的概念。 每个进程都有独立的代码和数据空间,进程间的切换会有较大的开销,线程可以看成时轻量级的进程,同一类线程贡献代码和数据空间,每个线程具有独立的运行栈和程序计数器,线程切换的开销小。
只有一条路径来执行,执行m1执行m2,等m2执行完再来执行m3最后回到了执行m1上。![](http://img.blog.csdn.net/20140213203513421?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlzaGVoZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20140213205258968?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlzaGVoZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
单线程
同时有且仅有一个程序在执行单线程实例1:public class { public static void main(String[] args) { m1(); } public static void m1() { m2(); m3(); } public static void m2() {} public static void m3() {} }程序执行图:
多线程
是在操作系统中同时运行多个程序,在同一个应用程序中有多个顺序流同时执行,两种方法来实现多线程:第一种是实现Runnable接口,然后实现其run方法
下面是通过实现Runnable接口实现多线程:public class TestThread1 { public static void main(String args[]) { Runner1 r = new Runner1(); r.start(); //r.run(); //Thread t = new Thread(r); //t.start(); for(int i=0; i<100; i++) { System.out.println("Main Thread:------" + i); } } } //class Runner1 implements Runnable { class Runner1 extends Thread { public void run() { for(int i=0; i<100; i++) { System.out.println("Runner1 :" + i); } } }产生的结果执行图:
第二种方式是new出Thread,然后重写start方法;
public class TestThread2 { public static void main(String args[]) { Runner2 r = new Runner2(); Thread t1 = new Thread(r); Thread t2 = new Thread(r); t1.start(); t2.start(); } } class Runner2 implements Runnable { public void run() { for(int i=0; i<30; i++) { System.out.println("No. " + i); } } }结果图:
总结:两种生成线程对象的区别:
1.两种方法均需执行线程的start方法为线程分配必须的系统资源、调度线程运行并执行线程的run方法。 2.在具体应用中,采用哪种方法来构造线程体要视情况而定。通常,当一个线程已继承了另一个类时,就应该用第二种方法来构造,即实现Runnable接口。3.java 是单根继承 实现多线程有两种实种方式一种是继承 thread 类 另一种就是实现Runnable接口 如果这个类还要继承其他的类的时候 这时候是不允许继承的。 此时就可以使用实现接口的方式,况且 Runnable接口中只有一个空的run()方法。4:Thread实现了Runnable,需要使用Runnable的地方可以直接使用thread;单独使用Runnable时要先把run方法实现了不能说使用那个更好,要看在什么地方使用最合适,要以实际情况而定!相关文章推荐
- Java学习从菜鸟变大鸟之三 多线程中Thread 和Runnable的区别与运用
- Java多线程学习-Runnable和Thread的区别
- Java多线程Thread和Runnable的区别
- java多线程学习——(1)认识Thread和Runnable
- Java学习从菜鸟变大鸟之一 hashCode()和equals()的本质区别和联系
- Java 多线程 -Thread 和Runnable 的区别和联系
- Java 并发编程之Runnable和Thread实现多线程的区别
- Java多线程实现接口Runnable和继承Thread区别(建议使用Runnable)
- 【Java并发编程】之六:Runnable和Thread实现多线程的区别(含代码)
- Java学习札记6:Thread 和 Runnable 的联系和区别(2)
- Java 继承Thread和实现Runnable实现多线程的区别
- Java 多线程实现接口Runnable和继承Thread区别
- 【Java并发编程】之六:Runnable和Thread实现多线程的区别(含代码)
- Java中两种多线程实现方法:Thread类和Runnable接口的联系与区别
- Java学习从菜鸟变大鸟之一 hashCode()和equals()的本质区别和联系
- 【Java并发编程】之六:Runnable和Thread实现多线程的区别(含代码)
- Java学习札记5:Thread 和 Runnable 的联系和区别(1)
- java多线程之Thread与runnable的区别
- Java 多线程:Thread 和 Runnable 区别
- Java学习从菜鸟变大鸟之一 hashCode()和equals()的本质区别和联系