就是说
Thread t1 = new Thread();
t1.start();现在t1执行;
我想让t1执行完了再执行一遍
如何做?

解决方案 »

  1.   

    在run里面
    while(true){if(。){break
    }}
      

  2.   

    如果你想让T1里的内容执行两次,我建议你在这个线程里加上while(true)循环
      

  3.   

    我做了一个,模拟多处理器处理多个请求的程序
    Server端只有3个线程,每个线程相当于一个处理器。
    request端,生成请求,由Server处理,
    request如果大于3个,就要等到server端处理器线程空余才执行。
    现在问题就是request大于3个的时候,server端怎么处理?
    import java.util.*;
    public class Server { public static void main(String args[])throws Exception{
    Processor pro = new Processor();

    /*Thread t1 = new Processor();
    Thread t2 = new Processor();
    Thread t3 = new Processor();
    t1.start();
    //t1.sleep(5000);
    t2.start();
    //t2.sleep(4000);
    t3.start();*/
    int requestNum = pro.req.num;
    System.out.println(requestNum);
    Thread []t = new Thread[3];
    for(int i=0;i<3;i++){
    t[i] = new Thread(pro);
    }

    for(int i=0;i<requestNum;i++){
    t[i%3].start();
    }
    }
    }class Request{
    String message;
    Request(String s){
    message = s;
    }
    public synchronized void print(){
    System.out.println(message);
    }

    }class RequestQueue{
    static List<Request> list = new ArrayList<Request>();
    static int num;
    static RequestQueue requestqueue = null;
    private RequestQueue(){
    //System.out.println(Math.random()*10/2);
    //int x = (int)Math.random()*10/2;
    //System.out.println(x);
    num = 5;//(int)Math.random()*10/2;
    //System.out.println(num);
    for(int i=0;i<num;i++){
    String message = i+"request";
    list.add(new Request(message));
    }
    }
    public static synchronized RequestQueue getInstance(){
    if(requestqueue == null){
    return new RequestQueue();
    }else{
    return requestqueue;
    }

    }

    }class Processor implements Runnable{
    static int num = -1;
    RequestQueue req = RequestQueue.getInstance();
    public void run(){
    List<Request> ls = req.list;
    //System.out.println(ls.size());
    num ++;
    ls.get(num).print();
    }
    }
      

  4.   

    可以继承 Ruannable接口,这样在启用一个线程多次启用~~ 
    public class Jar implements Runnable{

    int a = 3; 
    public void run(){
    a++;
    System.out.println(a);
    }

    public static void main(String [] args){
    Jar r = new Jar();
    new Thread(r).start();
    new Thread(r).start();
    new Thread(r).start();
    String a = new String("a");
    String b = new String("a");

    if(a == b)
    {
    System.out.println("=");
    }
    if(a.equals(b))
    {
    System.out.println("e");
    }
    }
      

  5.   

    一个线程是不能执行两次的,一但start()之后,结束了就不能再去调用,像你的T1一样,结束就没了,除非再new Thread(),要执行同样的代码,可以一直产生新的线程去调用.
      

  6.   


    public class Jar implements Runnable{

    int a = 3; 
    public void run(){
    a++;
    System.out.println(a);
    }

    public static void main(String [] args){
    Jar r = new Jar();
    new Thread(r).start();
    new Thread(r).start();
    new Thread(r).start();
    String a = new String("a");
    String b = new String("a");

    if(a == b)
    {
    System.out.println("=");
    }
    if(a.equals(b))
    {
    System.out.println("e");
    }
    }
    }
    打印结果:4
    e
    5
    6
      

  7.   

    我看你的意思是这个的,服务器启动3个线程来为客户端服务,当服务完成后,线程就会执行完退出,但是你想重新启动线程,来为下个客户服务,是这样吧?
    那么我的想法是你得有个控制器,这个控制器负责接收用户请求,并将请求分发给各个工作线程,这个控制器必须知道三个工作线程目前处于什么生命周期,如果工作线程执行完,则控制器负责重新启动工作线程为用户服务。
    这个东西做大了就是个跟Web容器差不多的东西。
      

  8.   

    呵呵 ,我找threadpoolexector的..