Java学习从菜鸟变大鸟之三 多线程中Thread 和Runnable的区别与运用

来源:互联网 发布:男生淘宝图片2017 编辑:程序博客网 时间:2024/05/01 12:44

   多线程机制是java中的一个特点,掌握它对后面的知识的理解至关重要,是java工程师的必备知识,多线程指在单个程序中可以运行多个不同的线程执行的不同的任务,线程是一个程序内部的顺序控制流。进程是静态的概念,线程是动态的概念。

   每个进程都有独立的代码和数据空间,进程间的切换会有较大的开销,线程可以看成时轻量级的进程,同一类线程贡献代码和数据空间,每个线程具有独立的运行栈和程序计数器,线程切换的开销小。


单线程

   同时有且仅有一个程序在执行


单线程实例1:


public class {public static void main(String[] args) {m1();}public static  void m1() {m2();m3();}public static void m2() {}public static void m3() {}}


程序执行图:






只有一条路径来执行,执行m1执行m2,等m2执行完再来执行m3最后回到了执行m1上。



多线程

    是在操作系统中同时运行多个程序,在同一个应用程序中有多个顺序流同时执行,两种方法来实现多线程:

第一种是实现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方法实现了


不能说使用那个更好,要看在什么地方使用最合适,要以实际情况而定!


6 0
原创粉丝点击