У меня возникли проблемы с пониманием того, почему, когда я создаю объект несколько раз, который реализует интерфейс runnable, и я создал их на @Test
, когда я вызываю эти объекты start()
, он запускает сначала @Test
, а затем он запускать метод, если объекты.Порядок выполнения нескольких нитей
Вот код:
public class Tests extends {
@Test(testName = "754")
public void concurrenciaGuardarArticuloTMP() throws Exception {
try {
this.codigoBarras =this.generarCodigoDeBarra();
System.out.println(codigoBarras);
logger.info("Codigo de barras generado fue ::: " + codigoBarras);
GuardarArticuloTMP articulo1 = new GuardarArticuloTMP(GuardarArticuloTMP.TMP.TMP_CODIGO_BARRA,"TMP, Hilo 1", codigoBarras,35);
GuardarArticuloTMP articulo2 = new GuardarArticuloTMP(GuardarArticuloTMP.TMP.TMP_CODIGO_BARRA,"TMP, Hilo 2", codigoBarras,37);
articulo1.start();
articulo2.start();
logger.info("Codigo de barras generado fue ::: " + codigoBarras);
System.out.println("Codigo de barras generado fue ::: " + codigoBarras);
logger.info(writeDTO(articulo1.getArticulo()));
} catch (Exception ex) {
logger.error("Error guardando Articulo.", ex);
this.setExecutionDetail(ex.getMessage());
}
}
}
И GuardarArticulos Класс:
public class GuardarArticuloTMP extends Setup implements Runnable{
private Thread t;
private String threadName;
private String codigoBarras;
private int numeroCaja;
private static Logger logger = Logger.getLogger(GuardarArticulo.class);
/**
* @param pThreadName nombre del hilo
* @param pCodigoBarras codigo de barras
* @param pNumeroCja numero de caja para el local
*/
public GuardarArticuloTMP(TMP tmp, String pThreadName, String pCodigoBarras, int pNumeroCja) {
this.threadName = pThreadName;
this.codigoBarras = pCodigoBarras;
this.numeroCaja = pNumeroCja;
this.tmp = tmp;
initLogger();
}
/**
* Crea un articulo
* @return nos devuelve un articulo
* @throws Exception
*/
private ArticuloFacadeDTO crearArticulo() throws Exception {
//creates Articulo
return toSave;
}
@Override
public void run() {
System.out.println("Corriendo " + this.threadName.toUpperCase() + " !!!!!!!!!!!!!!!!!!!!!!!!");
logger.info("Corriendo " + this.threadName.toUpperCase() + " !!!!!!!!!!!!!!!!!!!!!!!!");
try{
Thread.sleep(50);
logger.info("estoy en el run por crear el articulo");
ArticuloFacadeDTO toSave = crearArticulo();
writeDTO(toSave);
mgr.guardarArticuloFacade(toSave);
Thread.sleep(50);
}catch(Exception ex) {
ex.printStackTrace();
logger.error("Error::: ",ex);
}
}
public void start()
{
logger.info("Empezado el thread " + this.threadName);
if (t == null) {
t = new Thread (this, threadName);
t.setPriority(10);
t.start();
}
}
}
Что я ожидаю, что после того, как я называю все starts()
, он начинает на резьбе затем завершении сеанса @Test
, поэтому я делаю необходимые проверки.
Вы не описали фактическую проблему, с которой вы сталкиваетесь, и не включаете реализацию метода start(). – jtahlborn
Извините, я не могу понять, в чем проблема. Мне кажется, что у вас могут быть некоторые неправильные представления о том, как многопоточность работает в java. Не могли бы вы уточнить? – Tavo
Вы указываете, что ожидаете, но не указываете, что на самом деле делала программа. Начали ли темы? –