疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

多线程——继承Thread类


 

  什么是多线程

  简单的理解成:cpu“同时”执行多个任务,这就是多线程。(究其本质,当涉及到进程和线程的概念,上面的说法也不太合适,不过,简单的理解成这样也不为过。)

  多线程解决了什么问题?

  多线程通过充分利用cpu实现了提高计算机效率的问题。

  使用了多线程,效率就一定会提高?

  答案是否定的。在适当的情况下使用多线程,确实能提高效率,但是如果滥用多线程,有时候效率反而会降低。那么,什么情况下使用多线程会提高效率就成为了一个至关重要的问题。想真正弄清楚这个问题,就必须要明白操作系统中cpu的调度原理。还有,最好要清楚你使用的计算机有几个cpu,每个cpu是几核的,这在判断启用多少个线程时起着至关重要的作用。

  多线程不是万能的,但是没有多线程是万万不能的。所以,多线程是我们需要掌握的知识。但是,知道什么时候用多线程远比知道如何用多线程更为重要。这也就是“不怕不知道,就怕不知道”的一个实例化对象。

  下面就让我们看看java中是如何使用多线程的。

  java中创建线程有三种方法

  1、直接继承Thread类,并重写它的run方法

  2、实现Runnable接口,并实现它的run方法

  3、实现Callable接口,并实现它的call方法

  我们以一个实例来介绍一下第一种方法——继承Thread类。有一个字符串数组,现在我们要使用多线程分别打印出数组中各字符串的长度。具体代码如下:

  public class Test extends Thread{

  private String word;

  public Test(String word){

  this.word = word;

  }

  @Override

  public void run() {

  System.out.println(Thread.currentThread().getName() + ": 开始执行!" );

  try {

  //假设处理需要2秒

  Thread.currentThread().sleep(2000);

  } catch (InterruptedException e) {

  e.printStackTrace();

  }

  System.out.println(Thread.currentThread().getName() + ": 正在处理!" );

  System.out.println(Thread.currentThread().getName() + ": " + word + "长度为:" + word.length());

  }

  public static void main(String [] args ) {

  String [] words = {"first","second","world","thread"};

  for(String word : words){

  Test test = new Test(word);

  test.start();

  }

  }

  }

  使用这种方式实现多线程,简单、便捷,但是它要求使用类继承Thread类,而java中同一个类不能同时继承多个类,这就给操作带来了不便。同时,这种方式也不能达到数据共享的目的。