Java中的多线程

Java中有两种方法创建线程:

一、继承Thread类创建线程类,重写父类中的run( )方法

 1 public class threadA extends Thread {  
 2 
 3 public String s;
 4 
 5 //构造方法
 6 
 7 public threadA(String s){
 8 
 9          this.s = s;
10 
11 }
12 
13 //重写Thread类中的run()方法
14 
15  public void run() {  
16 
17      for(int i = 0; i < 100; i++) {  
18 
19            System.out.println("线程A"+s+"<><><><><><>"+i);  
20 
21         }  
22 
23    }  
24 
25  //主函数
26 
27  public static void main(String[] args) {  
28 
29        threadA t1 = new threadA("1");  
30 
31        threadA t2 = new threadA("2");  
32 
33       t1.run();
34 
35       t2.run();
36 
37    }  
38 
39 }  
View Code

上面调用run( )方法只是普通的方法,和我们在类中自己定义的方法一样,是顺序执行的,虽然我们写了两个线程,但是并没有体现出多线程的意义。为了体现多线程,应该使用start( )方法来启动线程,start()方法会自动调用run( )方法。所以上面的代码改为:

 1 public class threadA extends Thread {
 2 
 3     public String s;
 4 
 5     //构造方法
 6 
 7     public threadA(String s){
 8 
 9     this.s = s;
10 
11 }
12 
13 //重写Thread类中的run()方法
14 
15 public void run() {
16 
17     (int i = 0; i < 100; i++) {
18 
19     System.out.println("线程A"+s+"-----------"+i);
20 
21     }
22 
23 }
24 
25 //主函数
26 
27 public static void main(String[] args) {
28 
29     hreadA t1 = new threadA("1");
30 
31     threadA t2 = new threadA("2");
32 
33     t1.start();
34 
35     t2.start();
36 
37     }
38 
39 }
View Code

通过start( )方法启动的线程。不管t1.start( )调用的run( )方法是否执行完,都继续执行t2.start( )。如果下面有别的代码也同样不需要等待t2.start( )执行完而继续执行。

通过继承Thread的方法创建线程,启动线程只需创建本类对象,调用start()方法即可。

二、实现Runnable接口创建线程类

 1 public class threadB implements Runnable {
 2 
 3     public String s;
 4 
 5     //构造方法
 6 
 7     public thread2(String s){
 8 
 9     this.s = s;
10 
11 }
12 
13 //重写run()方法
14 
15 public void run() {
16 
17     for (int i = 0; i < 100; i++) {
18 
19     System.out.println(s+"______"+i);
20 
21     }
22 
23 }
24 
25 //主函数
26 
27 public static void main(String[] args) {
28 
29     threadB tB1 = new threadB("线程1");
30 
31     threadB tB2 = new threadB("线程2");
32 
33     Thread t1 = new Thread(tB1);
34 
35     Thread t2= new Thread(tB2);
36 
37     t1.start();
38 
39     t2.start();
40 
41     }
42 
43 }
View Code

通过实现Runnable接口来创建线程,需要先创建本类对象,再创建线程类对象(因为本类对象不是线程类),将本类对象传入线程类对象中,再调用线程类的start()方法才能开启线程。 

一般情况下多采用实现Runnable接口的方法来创建线程,因为一个类只能继承一个类,但是接口可以实现多个。

所谓进程,就是正在运行的程序。进程是资源分配的最小单位。每个进程都有自己独立的地址空间(内存空间),比如我现在打开视频软件,打开之后就启动了一个进程,操作系统会为该进程分配独立的地址空间。当打开另一个软件,又会启动一个进程,操作系统会为新的进程分配新的独立的地址空间。

即:用户每启动一个进程,操作系统就会为该进程分配一个独立的内存空间。

线程,是进程的一个实体,是cpu调度和分派的基本单位,它比进程小,是可以独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(比如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。线程有就绪,阻塞和运行三种基本状态。

线程--如何使用线程?

在java中一个类要当作线程来使用有两种方法:

        1、实现Runnable接口,并重写run函数

        2、继承Thread类,并重写run函数

 

一般情况下推荐使用-----实现Runnable接口,重写run方法来创建线程的方法来使用线程。

posted @ 2018-05-03 21:26  CiaoBello  阅读(115)  评论(0编辑  收藏  举报