Estou precisando de uma ajuda…
O problema é este:
Tenho que pegar no banco uma quantidade x de linhas de uma determinada tabela, com essas linhas na memória tenho que imprimir na tela só que com 5 threads.
Fiz um exemplo para melhor entendimento do problema:
classTestThread{publicvoidexecute(){//Objeto que serve de interface com o banco de dados ObejtoDAOdao=newObjetoDAO();//Pega o total de linhas que existem na tabela inttotal=dao.total();intlimit=10;for(inti=0;i<total;i++){//Retorna as linhas do banco intoffset=i;ArrayListarrayList=dao.getRows(limit,offset);//Nesta classe generica está o método (run) que eu quero executar, que no caso é imprimir um texto na tela ThreadGenericatest=newThreadGenerica();ThreadGenericatest1=newThreadGenerica();for(intj=0;j<arrayList.size();j++){test.start()test1.start();}}}}
Sempre quando executo o código dá esta exception:
Esta lógica está certa?
Desde já agradeço a ajuda de todos!!!
Amigo, eu não entendi muito bem o seu problema não…
Fiquei meio em dúvida quanto ao código também.
Mas se a Thread é só pra vc ver que tudo pode sair em ordem aleatória,
tente guardar todos os dados que você resgata do banco em um Vetor ou ArrayList e com uma variável com o tamanho desse vetor ou um contador com o tamando do vetor sendo seu limite.
Faça com que esse vetor e essa variável sejam static, para você poder acessá-las pela classe que vai executar a Thread.
Crie então as cinco Threads.
Tenha em mente, que a cada impressão, você deve incrementar o contador (fazer a verificação de que ainda existe objetos no vetor).
Assim, cada Thread sua vai pegar uma única posição do vetor…
Eu vou tentar fazer um exemplo aqui e posto daqui a pouco…
Abraço!!
H
HericksnakePJ
OLha, eu fiz o seguinte…povoei com Strings um ArrayList
Cada uma das 5 Threads vai imprimir todos os valores do ArrayList.
Note, que eu usei um Thread.sleep(Math.random());. Usei, pra deixar cada Thread rodar com um tempo sorteado de espera, mas você pode tirar esse trecho e ver que cada vez que executa ele roda de forma diferente de acordo com o escalonador do SO.
Espero que seja mais ou menos essa a sua dúvida e que eu tenha ajudado a solucionar.
importjava.util.ArrayList;publicclassThreadTest{staticArrayList<String>meuArray=newArrayList<String>();staticinttamArray=0;publicstaticvoidmain(String[]args){// TODO Auto-generated method stubmeuArray.add("A");meuArray.add("B");meuArray.add("C");meuArray.add("D");meuArray.add("E");meuArray.add("F");meuArray.add("G");meuArray.add("H");meuArray.add("I");tamArray=meuArray.size();System.out.println("Tamanho do array = "+tamArray);minhaThreadt1=newminhaThread("Thread 1");minhaThreadt2=newminhaThread("Thread 2");minhaThreadt3=newminhaThread("Thread 3");minhaThreadt4=newminhaThread("Thread 4");minhaThreadt5=newminhaThread("Thread 5");t1.start();t2.start();t3.start();t4.start();t5.start();}}classminhaThreadextendsThread{Stringnome;intcontador=0;publicminhaThread(Stringnome){this.nome=nome;}publicvoidrun(){while(contador<ThreadTest.tamArray){System.out.println(nome+" -- Imprimindo = "+(String)ThreadTest.meuArray.get(contador));try{Thread.sleep((long)Math.random());}catch(InterruptedExceptione){// TODO Auto-generated catch blocke.printStackTrace();}contador++;}}}