疯狂java


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

实现Runnable接口的多线程


 

   

  通过继承class Thread或实现Runnable接口,我们都可以实现多线程。如果有一个类,它已继承了某个类,又想实现多线程,那就可以通过实现Runnable接口来实现。

  run()函数必须进行覆写,把要在多个线程中并行处理的代码放到这个函数中。

  把一个实现了Runnable接口的对象作为参数产生一个Thread对象,再调用Thread对象的start()函数就可执行并行操作。

  例如:

  EasyRunnableThread thread2 = new EasyRunnableThread();

  new Thread(thread2).start();

  如果开发者自己直接调用了run()方法,那么这个将作为一个普通的串行程序进行执行,而不是基于多线程运转。

  简单多线程的实现的java源代码

  package com.thread;

  /**

  * 一个简单的实现Runnable接口的多线程

  *

  * @author 范芳铭

  */

  public class EasyRunnableThread implements Runnable {

  int i = 0, j = 0,k=0;

  int flag = 0;

  public void run() {

  //让系统运行6次,为了能观察结果即可

  for(int count = 0 ; count < 6 ; count ++){

  try {

  Thread.sleep(100);

  } catch (Exception e) {

  e.printStackTrace();

  }

  if (flag == 0) {

  i++;

  System.out.println("i=" + i);

  } else if (flag == 1){

  j++;

  System.out.println("B分割点:j=" + j);

  }

  else {

  k++;

  System.out.println("C分割点:k=" + k);

  }

  }

  }

  public static void main(String[] args) {

  EasyRunnableThread thread1 = new EasyRunnableThread();

  thread1.flag = 0;

  //不要直接调用run方法,否则会当成普通的串行线程处理

  //thread1.run();

  new Thread(thread1).start();

  EasyRunnableThread thread2 = new EasyRunnableThread();

  thread2.flag = 1;

  new Thread(thread2).start();

  EasyRunnableThread thread3 = new EasyRunnableThread();

  thread3.flag = 2;

  new Thread(thread3).start();

  }

  }

  运行结果

  C分割点:k=1

  B分割点:j=1

  i=1

  B分割点:j=2

  i=2

  C分割点:k=2

  B分割点:j=3

  C分割点:k=3

  i=3

  B分割点:j=4

  i=4

  C分割点:k=4

  B分割点:j=5

  i=5

  C分割点:k=5

  i=6

  C分割点:k=6

  B分割点:j=6

  同样,如果我们把直接调用class中的run方法,那么也会作为一个普通的串行方法进行调用,而不是基于多线程的运作。