在实现runnable java的类中加入延迟

时间:2014-03-07 18:47:57

标签: java multithreading sleep

我想睡一个线程,但我无法弄明白我尝试使用Thread.sleep和Timer但我无法实现这是我的代码:

public class HiloEscrituraSerial implements Runnable{
    private volatile boolean inicio = false;
    OutputStream out;
    int contador =0;
    private Vector<byte[]> datos;

    public HiloEscrituraSerial(){}

    public void run(){
        Pruebas.lecturaCompleta = false;
        Timer t = new Timer(10, null);
        t.setDelay(3000);
        t.setRepeats(true);
        t.start();

        System.out.println(FrmPrincipal.linea() +" Comenzando a enviar la prueba al    certificador");
        while(inicio){
            try{
                for(int i = 0;i<datos.size();i++){
                    //se deja un delay para que envie los comandos cada 0.1 seg.
                    /*
                    try{
                        Thread.sleep(10);
                    } catch (InterruptedException ex)
                        System.out.println(FrmPrincipal.linea() + " Error al dormir el hilo. "+Constantes.MENSAJE_MANUAL);
                       //Logger.getLogger(HiloEscrituraSerial.class.getName()).log(Level.SEVERE, null, ex);
                    }*/
                    this.out.write(datos.get(i));
                    System.out.println(FrmPrincipal.linea() + " La prueba fue enviada al certificador");
                }
                //cuando termine el de enviar los comandos finalizar el ciclo
                inicio = false;
            }
            catch (IOException e){
                System.out.println(FrmPrincipal.linea() + " Error en envio de datos al certificador. "+Constantes.MENSAJE_MANUAL);
                //e.printStackTrace();
            }
        }
        t.stop();
        Pruebas.lecturaCompleta = true;
    }

    public void setOutput(OutputStream out){
        this.out = out;
    }

    void setDatos(Vector<byte[]> comando){
        datos = comando;
    }

    public void setBegins(){
        inicio = true;
    }

    public void setClose(){
        inicio = false;
    }
}

我需要将线程休眠20毫秒才能再次在串口中写入。 有人可以帮帮我。

1 个答案:

答案 0 :(得分:1)

我不理解您的代码,也无法测试它,但以下工作:

public class Test {
    public static void main(String[] args) {
        new Thread(){
            @Override
            public void run() {
                for (;;) {
                    try {
                        Thread.currentThread().sleep(1000);
                    } catch (InterruptedException e) {
                    }

                    System.out.println("Executed");
                }
            }
        }.start();
    }
}

如果您想获得更多帮助,请将您的帖子更新为简化示例(不使用外部类和英文命名标识符)。