初识java 多线程

 1 //方法一:利用extends Thread方式创建线程
 2 //要点1:重写Thread中的run方法
 3 //要点2:用start方法启动
 4 public class basic extends Thread {
 5     public basic(String name){
 6         super(name);
 7     }
 8     public void run(){
 9         for(int i= 0; i<5; i++)
10         {        try {
11             sleep(5);//睡5毫秒,便于其他线程抢到时间片
12         } catch (InterruptedException e) {
13             e.printStackTrace();
14         }
15                 System.out.print(this.getName()+":"+i+"\n");
16             
17         }
18     }
19     public static void main(String[] args){
20         Thread t1 = new basic("张三");  //t1对象中的name为张三     Thread向下转型
21         Thread t2 = new basic("李四");  //t2对象中的name为李四
22         t1.start();
23         t2.start();
24     }
25 }

执行结果:

(一)

张三:0
李四:0
李四:1
张三:1
张三:2
李四:2
李四:3
张三:3
李四:4
张三:4

(二)

张三:0
李四:0
李四:1
张三:1
李四:2
张三:2
张三:3
李四:3
张三:4
李四:4      执行结果不一样

总结 :用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。

run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。

把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法,这是由jvm的内存机制规定的。并且run()方法必须是public访问权限,返回值类型为void。

 

 1 //方法二:声明实现Runnable接口的类
 2 //要点1:定义run方法
 3 //要点2:用start方法启动
 4 //要点3:实现Runable的类实例作为Thread构造函数的参数
 5 public class basic implements Runnable {
 6     private String name;
 7     public basic(String name){
 8         this.name = name;
 9     }
10     public void run(){
11         for(int i= 0; i<5; i++)
12         {    
13             System.out.println(name+":"+i);
14         }
15     }
16     public static void main(String[] args){
17         basic b1 = new basic("张三");
18         basic b2 = new basic("李四");
19         Thread t1 = new Thread(b1); // public Thread(Runnable target)
20         Thread t2 = new Thread(b2); // Thread类也实现了Runnable接口
21         t1.start();
22         t2.start();
23     }
24 }

 

运行结果一

张三:0
李四:0
李四:1
李四:2
李四:3
李四:4
张三:1
张三:2
张三:3
张三:4

运行结果二

张三:0
李四:0
张三:1
张三:2
张三:3
张三:4
李四:1
李四:2
李四:3
李四:4

 

posted @ 2016-01-28 16:44  白菜hxj  阅读(262)  评论(0编辑  收藏  举报