Array de trheads e metodo run

2 respostas
B

renho que fazer um gerendiador de downloads com trheads quero criar um arry das threads para startar todas ao mesmo tempo de um metodo só que ele só estar a ultima instancia da thred que eu criei tenho ceeteza qieue o meu arraylist de threads ta certo porque ele só estarta a ultima

codigo

processa as trheads

public void cadastra(){
	    	try {
	    	String url =JOptionPane.showInputDialog(null,"endereço da internet");
	        String Temp=JOptionPane.showInputDialog(null,"tempo da atualização");
	        String salvarOnde=JOptionPane.showInputDialog(null,"Local pra salvar na makina ");
	   	 
	        int tempo = Integer.parseInt(Temp);
	        
	        Temporizador t = new Temporizador(url,salvarOnde,tempo);
	        ArrayList<Temporizador> ArrayThreads = new  ArrayList<Temporizador>(); 
	        ArrayThreads.add(t);
				
				
				
				String cadastramais=JOptionPane.showInputDialog(null,"Criar mais ");
	             if(cadastramais.equals("1")){
	             
	            	 cadastra();
	             }
	             else{
	            	 rodar(ArrayThreads);
	             }
				
				
				
				
				
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		
	}





    public void rodar(ArrayList<Temporizador> ArrayThreads){
	    	
	    	
	    	Iterator it = ArrayThreads.iterator(); //Cria um iterator apartir da lista de itens

	    	while (it.hasNext()) { //Varre a lista
	    		Temporizador download=(Temporizador)it.next(); //pega o elemento da lista
	    		download.run();
	    		System.out.println(download.link);
	    		
	    	  
	    	} 
	    	
	    	
	    
   	    	
	    }

classe que extende thread

public Temporizador(String link ,String onde ,int tempo) throws IOException{
	    this.link=link;
	    this.onde=onde;
	    this.tempo=tempo;
	   
	    

	    
	   }
	    
	public void run() {

		try {

			
			for(;;){
				
				ManipulaUrl download = new ManipulaUrl(link,onde); 
                this.sleep(tempo);
                
		
	             
	             
                   
			}
			
			
			
		} catch (Exception e) {
			// TODO: handle exception
		}


	}

2 Respostas

yoshikichi

Toda vez que vc cria a sua thread, vc cria junto o ArrayList.
Ou seja, td vez que se cria uma Thread se cria um ArrayList junto, entao o ArrayList só add o elemento naquele momento.
E isso vira um circulo.

Faz o seguinte, cria o ArrayList antes, sacou, fora desse circulo.

falow

B

voce diz assim

ArrayList<Temporizador> ArrayThreads = new  ArrayList<Temporizador>(); 
	 boolean cad = true;
	 
	public ProcessaTreads() {}

	
	
	
	  
	
	
	
	    public void cadastra(){
	    	try {
	    	String url =JOptionPane.showInputDialog(null,"endereço da internet");
	        String Temp=JOptionPane.showInputDialog(null,"tempo da atualização");
	        String salvarOnde=JOptionPane.showInputDialog(null,"Local pra salvar na makina ");
	   	 
	        int tempo = Integer.parseInt(Temp);
	        
	        Temporizador t = new Temporizador(url,salvarOnde,tempo);
	       
	        ArrayThreads.add(t);
				
				
				
				String cadastramais=JOptionPane.showInputDialog(null,"Criar mais ");
	             if(cadastramais.equals("1")){
	             
	            	 cadastra();
	             }
	             else{
	            	 rodar(ArrayThreads);
	             }
				
				
				
				
				
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		
	}

ele da na mesma coisa processa somente aultima que eu criei e não todas

Criado 21 de novembro de 2008
Ultima resposta 21 de nov. de 2008
Respostas 2
Participantes 2