Duvida...Thread...OO.....<?>

4 respostas
P

não consegui chegar ao resultado:

qual letra será ???

Section 4: Concurrency > Objective 4.2 > Question 37 
Given: 

 5. class Order2 implements Runnable {
 6.   public void run() { 
 7.     for(int x = 0; x < 4; x++) {
 8.       try { Thread.sleep(100); } catch (Exception e) { }
 9.       System.out.print("r");
10.   } }
11.   public static void main(String [] args) {
12.     Thread t = new Thread(new Order2());
13.     t.start();
14.     for(int x = 0; x < 4; x++) {
15.       // insert code here
16.       System.out.print("m");    
17. } } }

Which, inserted at line 15, is most likely to produce the output rmrmrmrm?

A Thread.sleep(1);
B Thread.sleep(100);
C Thread.sleep(1000);
D try { Thread.sleep(1); } catch (Exception e) { }
E try { Thread.sleep(100); } catch (Exception e) { }
F try { Thread.sleep(1000); } catch (Exception e) { }

não entendi o resultado ???

Section 4: Concurrency > Objective 4.3 > Question 39 
Given: 

 5. class NoGo implements Runnable {
 6.   private static int i;
 7.   public synchronized void run() { 
 8.     if (i%10 != 0) { i++; }
 9.     for(int x=0; x<10; x++, i++) 
10.       { if (x == 4) Thread.yield(); }
11.   }
12.   public static void main(String [] args) {
13.     NoGo n = new NoGo();
14.     for(int x=0; x<101; x++) { 
15.       new Thread(n).start(); 
16.       System.out.print(i + " ");
17. } } }

Which is true?

A The output can never contain the value 10. 
B The output can never contain the value 30. 
C The output can never contain the value 297. 
D The output can never contain the value 820. 
E Making the run method un-synchronized will not change the possible output.

outra duvida qtos tem ???

Section 5: OO Concepts > Objective 5.1 > Question 41 
Given: 

 1. class TestFoo {
 2.   int x;
 3.   String y;
 4.   int getX() { return x; }
 5.   String getY() { return y; }
 6.   void setX(int x) {
 7.     int z = 7;
 8.     this.x = x;
 9.   }
10. }

How many modifiers must you add to encapsulate this class?

A 2 
B 3 
C 4 
D 5

outra duvida ???

Section 5: OO Concepts > Objective 5.1 > Question 42 
Given: 

21. class Wheels { 
22.   private Bike bike;
23.   void setBike(Bike b) { bike = b; }
24. }
25.
26. class Bike {
27.   private Wheels [] wheels = new Wheels[5];
28.   void setWheels(Wheels [] w) {
29.      if( w.length == 2)
30.        wheels = w;
31.   }
32. }

Which is true?

A Compilation fails. 
B These classes are NOT coupled. 
C These classes are loosely coupled. 
D These classes are tightly coupled. 
E These classes are abstractly coupled.

mas uma que não entendi o que pedi>>???

Given: 

1. class Book {
2.   private final void read() { System.out.print("book "); }
3. }
4. class Page extends Book {
5.   public static void main(String [] args) {
6.     // insert code here
7.   }
8.   private final void read() { System.out.print("page "); }
9. }

And these three code fragments (x, y, z): 
x. // just a comment
y. new Page().read();
z. new Book().read();
How many, inserted independently at line 6, allow the code to compile and run without exception?


A 0 B 1 C 2 D 3

o que quer dizer as 2 linhas abaixo o significado de <?> :

public static void takeCars(List<? extends Object> list) {}

public static void takeCars(List<?> list) { }


uma duvida referente ao Comparable
o retorno quando é zero vale apenas um objeto é isso ???

se voltar 1 ai tudo bem calcula em cima dos objetos adicionados essa é minha
duvida ???

class Stuff implements Comparable {
	    int x; 
	    Stuff(int x) { 
	    	this.x = x;
	    }
	    public int compareTo(Object o) { return 0; }
	  }

public class Ex58 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		TreeSet<Stuff> ts = new TreeSet<Stuff>();
		ts.add(new Stuff(1));
		ts.add(new Stuff(2));
		ts.add(new Stuff(3));
		System.out.println(ts.size());
	}

}

não entendi porque saiu fora da ordem na hora
ka1 pois estava na ordem a,b,c

public static void main(String[] args) {
		// TODO Auto-generated method stub
		     HashMap h = new HashMap();
		      h.put("a","aa"); h.put("b","bb"); h.put("c","cc");
		      Set ks = h.keySet();
		      Object [] ka1 = ks.toArray();
		      ks = new TreeSet(ks);
		      Object [] ka2 = ks.toArray();
		     System.out.println(Arrays.equals(ka1, ka2));
		     
		     for(Object s:ka1){
		    	 System.out.println("ka1"+(String)s);
		     }
		     //System.out.println("ka1="+ka1.toString());
		     //System.out.println("ka2="+ka2.hashCode());
		     for(Object s:ka2){
		    	 System.out.println("ka2="+(String)s);
		     }
	}

}
resultado:
false
ka1a
ka1c
ka1b
ka2a
ka2b
ka2c

4 Respostas

renzonuccitelli

A resposta da primeira é letra E. Já que o que está escrito tem em média o mesmo número de r’s e m’s, o tempo de espera das duas linha de execução tem que ser iguais, ou seja, no caso deve ser de 100 mS

B

A primeira é letra E, por causa da sincronização, ambos tem 100 ms. Thread.sleep é um método static que para a execução da thread onde ele foi chamado. catch vai fazer que ele não falhe.

Dois é letra E, praticamente por eliminação. Não dá pra saber que valores ele vai imprimir.

Três é letra A, modificadores que ele fala são de acesso, e para proteger a implementação de uma classe(ou seja, encapsulá-la), coloca-se private em seus atributos.

Quatro acho que é letra C. Não sei o que é abstratamente acoplados, mas acoplamento fala sobre o quanto uma classe sabe dos detalhes de implementação de outra. Não vejo problemas desse tipo.

Cinco é letra A. Os métodos são privados, não dá pra chamá-los.

Seis: As duas linhas são duas formas de dizer a mesma coisa, que pode ser passado qualquer List qualquer tipo que for passada por parâmetro, porém o conteúdo da lista só pode ser acessado e não modificado (um add por exemplo dá um erro de compilação, é assim com qqr coisa que use extends em genéricos).

Sete:

Comparable pede p/ implementar compareTo, e ele funciona da seguinte forma:

Caso um objeto seja “menor” que o outro, retorne um número negativo, caso sejam iguais, zero, caso seja maior, positivo.

Apesar de Sets usarem do equals para evitar elementos duplicados, o TreeSet utiliza-se do compareTo, pois ele é(deveria ser) consistente com equals.

Assim, se o seu compareTo só retornar zero, ele só vai adicionar o primeiro elemento e nenhum mais, já que para ele todos são elementos duplicados.

Oito:

HashMaps não garantem a ordem de seus elementos. Nem Sets. Somente Lists(ordem de inserção), e SortedSets e SortedMaps(ordem natural) fazem isso.

renzonuccitelli

Na realidade se tirar o synncronized vai alterar sim, pois a a Thread da main vai poder imprimir qualquer coisa, logo essa opção está eliminada. Com esse modificador, a main não poderá acessar o atributo i enquanto a outra thread estiver executando o método, então ele não vai imprimir valores em que o loop do método da Thread está sendo executado
1)A Thead antiga continuar a execução de seu método, onde x estava igual a 4, incrementando o valor de i em 6 unidades
2) A nova Thread Criada executa até que o valor de x seja 4, incrementando o valor de i em 4 unidades ou 5 unidades, dependendo essa valor do valor de i quando foi chamado o start. Se for divisivel por 10, ele incrementará de 5, caso contrário, de 4.

Suponha que no sempre a Thread criada no laço anterior termine de executar antes de ser criada a segunda. Nesse caso, sempre seria somado 4, impresso o valor, depois somado 6, imprimindo o valor de i. Assim, seria impressa a sequencia 4,10,14,20…etc. Ou seja, os numeros 10, 30 e 820, seriam impressos. Assim, por eliminação, eu daria resposta C.

Ainda to tentando entender melhor a questão para não fazer por eliminação, e sim concluir pq não pode dar 297. Isso se eu estiver certo na minha análise anterior…hehe

renzonuccitelli

o que quer dizer as 2 linhas abaixo o significado de <?> :

public static void takeCars(List<? extends Object> list) {}

public static void takeCars(List<?> list) { }

? significa qualquer calsse. Assim, o primeiro método aceita qualquer subclasse de Objetct, eqto o segundo aceita qq classe.

Recomendo dar uma lida em Generics para entender melhor. Isso foi criado para evitar os infinitos casts que eram necessários, e tb para informar erros em tempo de compilação em vez de execução. Isso porque o ClassCastException era uma das exceções mais lançadas, depois de NullPointerException…

Criado 22 de outubro de 2008
Ultima resposta 22 de out. de 2008
Respostas 4
Participantes 3