本人正在做一项目, 后台处理有四五个线程。  而且只有着几个线程  不会增加也不会减少   每隔一段时间这些线程要运行一遍, 线程做好了 就是不知道该怎么控制它们  启动以后就不知道该怎么控制它们再启动。  需不需要线程池来控制 。 大家教教小弟我。
  小弟对于多线程是白痴一个 
  所以还请各位大侠不惜赐教  
       感激不尽!~~

解决方案 »

  1.   

    public class ServerThread implements Runnable{  Vector<ServerThread> m_threads;
     String ipp = null; public ServerThread(String ip,Vector<ServerThread> threads) {
    ipp = ip;
    m_threads = threads;

    } public void run(){
    try{
    Thread.sleep(20000);
    String average = "";
    boolean status = false;
    try {
    int timeOut = 10000;
    status = InetAddress.getByName(ipp).isReachable(timeOut); 
    System.out.println(status+ipp);
      

  2.   

    implements Runnable下的run函数这个就可以启动了我这个同时九百多个,一起。没有事情
      

  3.   

    你可以使用 wait() 方法,这个方法是导致线程停止并且放弃线程锁,等到需要启动线程时调用 notify() 方法就可以启动它
      

  4.   

    用我做好的线程的东西,可以省掉不少烦恼,代码示范如下:
    // 实现处理的类
    public class TestStringProcessor extends QueueProcessor<String> {
    public TestStringProcessor(){
    super();
    } @Override
    public void process(String obj) {
    System.out.println("Processed by " + this.getName() + " : " + obj);
    }
    }…// 20个处理线程
    ArrayList<QueueConsumer<String>> processors = 
    new ArrayList<QueueConsumer<String>>(20);
    for (int i = 0; i < 20; i ++){
    processors.add(new TestStringProcessor());
    }
    // 并发地从一个长度为200的队列取数据进行处理
    QueueConsumerGroup<String> group = 
    new QueueConsumerGroup<String>(200, processors);// 开始并行处理
    group.start();
    // 向队列送入待处理的数据
    for (int i = 0; i < 250; i ++){
    String s = "This is a string_" + i;
    try {
    group.queue(s);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    System.out.println("Queued: " + s);
    }
    //等待队列处理空了之后结束
    group.stop();
    System.out.println("All finished!");public abstract class net.sf.jabb.util.thread.QueueConsumer
    public abstract class net.sf.jabb.util.thread.QueueProcessor
    public abstract class net.sf.jabb.util.thread.QueueBatchUniqueProcessor
    public class net.sf.jabb.util.thread.QueueConsumerGroup这些类构成了一个小型的框架,能够简化多线程并行数据处理的程序开发。
    用起来很简单,只要这样:
    1. 创建你自己的处理实现类,继承QueueProcessor或者QueueBatchUniqueProcessor,实现其中的process()方法。
    2. 用BlockingQueue的实例来存放待处理的数据
    3. 对于你自己的处理实现类,创建足够多的实例。每个实例都会有一个对应的工作线程在需要的时候被创建。
    4. 创建一个QueueConsumerGroup的实例来管理和控制整个多线程数据处理过程。QueueProcessor适合于需要对数据进行一个一个地处理的场合。
    QueueBatchUniqueProcessor适合于需要对数据进行分批处理的场合。而且它能够在每批中去除掉重复的数据。
    JABB是一些可重复使用的Java应用程序组件。JABB里面的一些组件可能互相有依赖关系,但是目的不是把JABB做成一个框架。JABB是依据Apache许可发布的开源软件。JABB在sourceforge.net上。相关链接如下:
    Project summary page: http://sourceforge.net/projects/jabb/
    Project home page: http://jabb.sourceforge.net/
    Introduction to JABB (PDF): http://jabb.sourceforge.net/doc/jabb_intro.pdf
    Javadoc: http://jabb.sourceforge.net/javadoc/
    Downloads: http://sourceforge.net/projects/jabb/files
    Source code browsing: http://jabb.svn.sourceforge.net/
    SVN: https://jabb.svn.sourceforge.net/svnroot/jabb
      

  5.   

    线程不能让其停止,以前上学校,就说不能用stop来停止线程,如果要停止,只能用break来结束它!
        让他不断的运行可以用while(true)在里面程动线程,一个死循环,线程就不会停了,里面可以加个if 条件,再满足什么条件下,就让他break;这样线程就会结束!再者,你说让线程每格一断时间,再运行,你可以用Thread.sleep(long time)方法让线程来睡眠;
        再不行的话,就让隔一阵再生成一个线程,但必需要有一个激发方法,来让它创建!