技术开发 频道

Java开发:实现一个简单的多线程

  【IT168技术】首先,定义线程

  1)扩展java.lang.Thread类。

  此类中有个run()方法,应该注意其用法:

  public void run()

  如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。

  Thread 的子类应该重写该方法。

  2)实现java.lang.Runnable接口。  

void run()

  使用实现接口 Runnable 的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用对象的 run 方法。

  方法 run 的常规协定是,它可能执行任何所需的操作。

  实例化线程

  如果是扩展java.lang.Thread类的线程,则直接new即可。

  如果是实现了java.lang.Runnable接口的类,则用Thread的构造方法:

  Thread(Runnable target)
  Thread(Runnable target, String name)
  Thread(ThreadGroup group, Runnable target)
  Thread(ThreadGroup group, Runnable target, String name)
  Thread(ThreadGroup group, Runnable target, String name,
long stackSize)

  启动线程

  在线程的Thread对象上调用start()方法,而不是run()或者别的方法。

  在调用start()方法之前:线程处于新状态中,新状态指有一个Thread对象,但还没有一个真正的线程。

  在调用start()方法之后:发生了一系列复杂的事情

  启动新的执行线程(具有新的调用栈);

  该线程从新状态转移到可运行状态;

  当该线程获得机会执行时,其目标run()方法将运行。

  注意:对Java来说,run()方法没有任何特别之处。像main()方法一样,它只是新线程知道调用的方法名称(和签名)。因此,在Runnable上或者Thread上调用run方法是合法的。但并不启动新的线程。

  例子  运行结果

1.package thread_test;  
2.  
3./**  
4. * 测试Runnable类实现的多线程程序  
5. *  
6. *
@author ciding  
7. * @createTime Dec 7, 2011 9:38:52 AM  
8. *  
9.
*/  
10.public class TestRunnable {    
11.    public static void main(String[] args) {    
12.        StrRunnable sr1 = new StrRunnable("chenfengbin");  
13.        StrRunnable sr2 = new StrRunnable("cidng");  
14.  
15.        Thread t1 = new Thread(sr1);  
16.        Thread t2 = new Thread(sr2);  
17.  
18.        t1.start();    
19.        t2.start();    
20.          
21.        StrThread st1 = new StrThread("chenfengbin");  
22.        StrThread st2 = new StrThread("cidng");  
23.  
24.        Thread t3 = new Thread(st1);  
25.        Thread t4 = new Thread(st2);  
26.  
27.        t3.start();    
28.        t4.start();    
29.    }  
30.}  
31.  
32./**  
33. * 通过实现接口的多线程  
34. *  
35. *
@author ciding  
36. * @createTime Dec 8, 2011 10:20:28 PM  
37. *  
38.
*/  
39.class StrRunnable  implements Runnable {    
40.    private String name;    
41.  
42.    public StrRunnable(String name) {    
43.        this.name = name;    
44.    }    
45.  
46.    public void run() {    
47.        for (int i = 0; i < 3; i++) {    
48.            for(long j=0;j<100000000;j++);   //用来模拟一个非常耗时的操作,方便显示多线程效果。  
49.            System.out.println("Runnable下的" + name + ": " + i);  
50.        }    
51.    }    
52.}  
53.  
54./**  
55. * 通过继承类的多线程  
56. *  
57. *
@author ciding  
58. * @createTime Dec 8, 2011 10:20:50 PM  
59. *  
60.
*/  
61.class StrThread extends Thread{  
62.    private String name;  
63.      
64.    public StrThread(String name){  
65.        this.name = name;  
66.    }  
67.      
68.    public void run() {    
69.        for (int i = 0; i < 3; i++) {    
70.            for(long j=0;j<100000000;j++);   //用来模拟一个非常耗时的操作,方便显示多线程效果。  
71.            System.out.println("Thread下的" + name + ": " + i);  
72.        }    
73.    }  
74.}  

 

1.Runnable下的chenfengbin: 0  
2.Runnable下的cidng: 0  
3.Thread下的chenfengbin: 0  
4.Thread下的cidng: 0  
5.Runnable下的chenfengbin: 1  
6.Runnable下的cidng: 1  
7.Thread下的chenfengbin: 1  
8.Thread下的cidng: 1  
9.Runnable下的chenfengbin: 2  
10.Thread下的chenfengbin: 2  
11.Runnable下的cidng: 2  
12.Thread下的cidng: 2  
0
相关文章