2010-05-10 92 views
0

有人可以请解释或举例说明如何在Java中创建具有不同功能的多个线程?Java多线程挑战

这是代码...我试图创建一个线程,该线程完成public void rnd_list()应该做的(30个随机数列表),这是一个不同于在public void中定义的任务的任务run()这是默认执行thread.start()时的方法。我想知道如何在同一个类Apple中创建一个具有不同功能的线程,在这种情况下,它是public void rnd_list()中的一个。

import java.util.Random; 

public class Apple implements Runnable { 

    String name; 
    int time, number, first, last, maximum; 
    Random r = new Random(); 
    Random n = new Random(); 
    int[] array = new int[10]; 

    public Apple(String s, int f, int l) { 
     name = s; 
     first = f; 
     last = l; 
     maximum = array[0]; 
    } 

    // public void rnd_list() { 
    //  for(int j = 0; j < 30; j++) { 
    //   number = n.nextInt(100); 
    //   array[j] = number; 
    //   System.out.println("thread" + name + "array [" + j + "] =" + array[j]); 
    //  } 
    // } 

    public void run() { 
     try { 
      for(int i = first; i < last; i++) { 
       if(maximum < array[i]) { 
        maximum = array[i]; 
       } 
      } 

      System.out.println("maximum = " + maximum); 
     } catch(Exception e) {} 
    } 

    public static void main(String[] args) { 
     Thread t1 = new Thread(new Apple("one ", 0, 2)); 
     Thread t2 = new Thread(new Apple("two ", 3, 5)); 
     Thread t3 = new Thread(new Apple("three ", 6, 9)); 

     try { 
      t1.start(); 
      t2.start(); 
      t3.start(); 
     } catch(Exception e) {} 
    } 
} 
+1

我编辑了一下你的问题......这是“Java”的,不是“JAVA”。然后,Sun公约(并且他们被广泛遵循)建议让类名以大写字母开头(所以我把它定义为“苹果”而不是“苹果”)。然后在Java中我们有“方法”,而不是“功能”。 – SyntaxT3rr0r 2010-05-10 06:40:13

回答

1

一个良好的开端是sun's website

+0

谢谢,但我已经在那里搜索 – KJP 2010-05-10 06:03:30

+0

呃... KJP,你甚至点击过那个链接吗? – RarrRarrRarr 2010-05-10 06:05:31

+0

我点击了链接,否则我无法知道我是否访问了链接 – KJP 2010-05-10 06:07:59

2

当一个线程与一个Runnable创建,当Thread.start()被调用的Runnable.run()方法将被运行。如果你想运行rnd_list()方法,你有两个选择。

  1. 创建其实现Runnable一个新的类,并在该类调用rnd_list)的run()方法(
  2. 变化Apple.run实行()来检查属于苹果的一些州和可选执行rnd_list ()。
0

只是为了澄清:你想在一个单独的线程中运行rnd_list(),并使用run()来执行其他任务吗?

这不是非常好的做法,但你可以通过添加这个方法将你的苹果类

Thread startRndList() 
    { 
     Thread t = new Thread(new Runnable() { 
       public void run() 
       { 
        rnd_list(); 
       } 
     }); 
     t.start(); 
     return t; 
    } 

开始进行这项工作的具体方法一个新的线程,但不是直接实例线程,你最好不要使用并发utils ExecutorService类。

0

我想你可以使用匿名类或实现Runnable的嵌套类,但它是讨厌的,你可能有并发问题...