Java实现多线程的方法

Java多线程

首先来理解一下什么线程,什么是进程。

 个人认为,进程线程应用程序的父子关系是这样的:

 

一个应用程序至少有一个进程。一个进程至少有一个线程。

 在任务管理器也可以看得到如何。我启动了一个UC浏览器:

 

如何在JAVA中实现多线程

 

方法有两个:

1.     继承Thread类

2.     实现Runnable接口。

 

首先演示一下继承Thread类的办法:

[java] view plain copy
 
  1. class A extends Thread{  
  2.     public void run(){          //覆盖Thread类中的run方法。里面要写的是该线程的执行任务。  
  3.         for(int i = 0; i <20; i++){  
  4.             System.out.println("线程"+Thread.currentThread().getName()+"正在运行");  
  5.         }  
  6.     }  
  7. }  
  8. class ThreadDemo{  
  9.     public static void main(String args[]){  
  10.         A a = new A()   ;  
  11.         a.start();  
  12.         for(int i = 0; i<20; i++){  
  13.             System.out.println("线程"+Thread.currentThread().getName()+"正在运行");  
  14.         }  
  15.     }  


运行结果:

 

 

 

通过继承Thread来实现多线程:覆盖run方法。用start()方法创建线程并执行run方法。

我们知道,Java中是单继承的,那么这么好的一个继承机会就给了它,是一个缺陷,java官方后来给出了一种实现接口的方法来实现多线程。

 

那么,实现Runnable接口的方法:

[java] view plain copy
 
  1. class A implements Runnable{  
  2.     public void run(){          //覆盖Thread类中的run方法。里面要写的是该线程的执行任务。  
  3.         for(int i = 0; i <20; i++){  
  4.             System.out.println("线程"+Thread.currentThread().getName()+"正在运行");  
  5.         }  
  6.     }  
  7. }  
  8. class ThreadDemo{  
  9.     public static void main(String args[]){  
  10.         A a = new A()   ;  
  11.         new Thread(a).start();  
  12.         for(int i = 0; i<20; i++){  
  13.             System.out.println("线程"+Thread.currentThread().getName()+"正在运行");  
  14.         }  
  15.     }  
  16. }  

 

 

 

 

可以看出在创建线程类时实现Runnable接口和继承Thread类里面的代码是一样的,执行的任务都是放在run方法里。

而在线程的启动方面,是有所不同的。如果直接调用run方法,是没有启动创建新的线程的。线程的创建都是要通过Thread类的start()方法创建线程并执行run代码的,那么我们要创建一Thread类的实例,Thread类中有一个构造方法是传入Runnable实例来进行Thread类实实例化的。

 

那么我们就可以利用这个方法构建一个Thread实例,趁机调用start()方法创建线程并执行run();(其实创建Thread实例只是一个踏板而已,目的是调用start()方法)

 

既然是不同的的方法,自然各自有各自的优点:

继承Thread类的优点:

1.     没想到。

 

实现Runnable接口的优点:

1.     可以继承别的类。省下一个继承的机会。

2.     可以实现资源共享。

 

下面讲讲为什么实现Runnable接口来启动线程能实现资源共享。(当初我想了好久一会。。。而且在网上搜索还没找到有关于这个的。。我决定把它独立放出来!让有需要的人能找到的到!)

下面请看我的另一个博文:

http://blog.csdn.net/zuolovefu/article/details/40264719

posted @ 2016-12-08 09:27  天涯海角路  阅读(127)  评论(0)    收藏  举报