java thread写法

代表线程的是类Thread和接口runnable,因此可以通过两种方式来实现多线程。

1) 继承Thread类

例子:

PrintThread类继承了Thread,然后实现run()方法。

public class PrintThread extends Thread{
  String name;
  public PrintThread(String name)
  {
      this.name = name;
  }
  
  public void print()
  {
      System.out.print(name + " start to print ");
      
      try {
        Thread.sleep(3000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
      
      System.out.println(name + " finished print ");
  }
  
  public void run()
  {
      print();
  }
}

 

 

 

2)实现Runnable接口

public class PrintThread implements Runnable{
  String name;
  public PrintThread(String name)
  {
      this.name = name;
  }
  
  public void print()
  {
      System.out.print(name + " start to print ");
      
      try {
        Thread.sleep(3000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
      
      System.out.println(name + " finished print ");
  }
  
  public void run()
  {
      print();
  }
}

 

线程写好了,那怎么使用呢,两种用法的使用者有什么不同呢

对于extends写法,可有3种写法,其实是第一个和第二个其实是1种,第2个是用多了多态。

public class TestPrint {
	public static void main(String[] args) {
//Thread t1 = new Thread(new PrintThread("t1")); PrintThread t1 = new PrintThread("t1");
// Thread t2 = new PrintThread("t2"); //Thread t1 = new Thread(new PrintThread("t1")); //Thread t2 = new Thread(new PrintThread("t2")); Thread t3 = new Thread(new PrintThread("t3")); t1.start(); t2.start(); t3.start(); } }

  

把原来PrintThread改为implements Runnable后,上面的测试类TestPrint不能编译通过,这是因为

1) t1对象能成功创建,但是不能成功调用start方法,因为runnable接口中只有run方法,没有start()方法。

2)t2对象不能成功创建,因为Thread类实现了runnable接口,PrintThread类也实现了Runnable接口,但是这2个类没有父子关系

3)t3能创建成功,也能调用start()方法启动线程。

所以实现Runnable接口的对象只能通过Thread(Runnable targe)构造函数来创建线程。

于是测试类变成:

public class TestPrint {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
            Thread t1 = new Thread(new PrintThread("t1"));
        Thread t2 = new Thread(new PrintThread("t2"));
        Thread t3 = new Thread(new PrintThread("t3"));
        
        t1.start();
        t2.start();
        t3.start();
        
    }
}

 

总结:

1)extends用法调用时有2种写法: new thread(new PrintThread()), 或者直接 new PrintThread().

2) Runnable用法调用时只能 New Thread(new PrintThread()).

 

posted @ 2020-09-30 16:35  Sunshine106  阅读(432)  评论(0编辑  收藏  举报