复杂的事情要简单做;   简单的事情要认真做;   认真的事情要重复做;   重复的事情要创造性地做。

信心 恒心 决心 创意 乐意

も军魂ミ 心系java

Java的魅力:跨平台、动态的Web、Internet计算 Java在Web、移动设备以及云计算方面前景广阔 我的java编程不是梦!!! 俗话说的好:“授人以鱼不如授人以渔”.
posts - 10, comments - 12, trackbacks - 0, articles - 5
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

多线程中Thread类和Runnable接口

Posted on 2010-11-08 11:41 セ军魂ミ 阅读(512) 评论(0)  编辑  收藏 所属分类: java_多线程
           今天刚接触了java中的多线程,感觉这方面对以后很多程序的操作都很有帮助,即相当于程序的同时运行。现在就于我对多线程中Thread类和Runnable接口的初步认识,给大家做个简单的认识:
          1、从JDK文档中可以发现Thread类实际上也是实现了Runnable;                                

           2、用Thread继承而来的线程,一个线程序对象只能启动一次,无论调用多少遍start()方法,结果都只有一个线程;
                 注:sart()方法是使该线程开始执行,java虚拟机调用该线程的run()方法,也可以调用被子类覆盖写过的方法。

           3、实现Runnable接口比继承Thread类的好处:①适合多个相同程序代码的线程去处理同一资源的情况,也能避免由于java
                                                                                              单线程处理带来的局限,即处理更为灵活。
                                                                                          ②有利于程序的健壮性,能实现资源的共享。



第一种方式:继承Thread类

class MyThread extends Thread{
 //线程延迟时间
 private int time;
 //线程的名字由Thread累自行管理
 public MyThread(String name,int time){
  //调用Thread类中的构造方法,设置线程的名字
  super(name);
  this.time=time;
 }
 public void run(){
  for(int i=0;i<10;i++){
   try {
    Thread.sleep(this.time);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   this.printMsg();
  }
 }

 public void printMsg(){
  System.out.println (Thread.currentThread().getName()+"-->***正在运行***"+this.time+"秒");
 }
}
public class Demo {
 public static void main(String[] args){
  MyThread mt = new MyThread("AA",100);
  MyThread mt1 = new MyThread("BB",200);
  MyThread mt2 = new MyThread("CC",300);
  
  mt.start();
  mt1.start();
  mt2.start();
 }
}

运行结果:



第二方式:实现Ruanable接口

class MyThread1 implements Runnable{
 private String name;
 private int time;
    public MyThread1(String name,int time){
     this.name= name;
     this.time=time;
    }
 public void run(){
  for(int i=0;i<10;i++){
   try {
    Thread.sleep(this.time);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   this.printMsg();
  }
 }
 public void printMsg(){
  System.out.println (this.name+"-->***正在运行***"+this.time+"秒");
 }
}
public class DemoF {
 public static void main(String[] args){
  MyThread mt = new MyThread("AA",100);
  MyThread mt1 = new MyThread("BB",200);
  MyThread mt2 = new MyThread("CC",300);
  
  mt.start();
  mt1.start();
  mt2.start();
 }

}

运行结果:类同于上一种方法的结果,只是出的顺序不相同


只有注册用户登录后才能发表评论。


网站导航: