ulysse00
Messages postés292Date d'inscriptionlundi 6 novembre 2006StatutMembreDernière intervention12 mai 2013
-
23 mai 2007 à 22:57
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 2013
-
29 mai 2007 à 20:40
salut
voila le code qui contient des messages d'erreurs et je ne sais plus comment les enlever pour que le code ça foctionne
les messages d'erreurs sont
"thread1.java": local variable A is accessed from within inner class; needs to be declared final at line 19, column 15
"thread1.java": local variable m1_IOThread is accessed from within inner class; needs to be declared final at line 35, column 44
"thread1.java": local variable B is accessed from within inner class; needs to be declared final at line 42, column 37
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201339 24 mai 2007 à 21:36
Salut:
Première remarque: Tu ne respectes pas la convention de nommage en Java.
"La première lettre du nom d'une variable doit être en minuscule".
Crois moi, ça aide beaucoup à lire aisément un code.
Pour ton problème, je pense que déja le compilateur t'a signalé ce qu'il faut faire.
"Il faut ajouter le modificateur final à la déclaration de tes variables locales".
Proposition:
Si ces variables locales étaient par exemple des attributs de ta classe, pas de problème; ils sont belle et bien visibles au niveau des classes innées.
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201339 24 mai 2007 à 21:40
Salut:
Autre chose à dire, qui explique bien la cause de cette error de compilation.
Les variables locales sont créées dans la pile d'exécution de la méthode correspondantes.(Heap)
Par contre les attributs, ou les variables déclarées en tantque final sont allouées dans la pile d'exécution du tout le programme qui est le plus général et le plus global. (Tas)
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201339 24 mai 2007 à 22:44
Salut:
C'est logique, tu es en train d'affecter une nouvelle valeur à une variable constante qui a déja réçu une valeur.
final ArrayList A = new ArrayList (); // CECI EST LA PREMIERE AFFECTATION, OK
A = calcule.methode (); // CECI EST LA DEUXIEME AFFECTATION, ERREUR C'EST UNE VARIABLE CONSTANTE (final)
Pourquoi ne pas rendre ces variables en tantque attributs de ta classe de cette façon ils deviendront visibles et tu n'as pas à utiliser le modificateur final.
class ThreadExample {
private ArrayList a = new ArrayList ();
private ArrayList b = new ArrayList ();
private Thread thread;
public method () {
thread = new Thread () {
public void run () {
// ...
}
};
}
}
ulysse00
Messages postés292Date d'inscriptionlundi 6 novembre 2006StatutMembreDernière intervention12 mai 20131 25 mai 2007 à 16:26
salut merci encore
salut
je voulais bien utiliser les threads
de cette façons
class thread
{
public static ArrayList methode() {
thread1 qui fait ArrayList A = calcule1.methode();
thread2 qui fait ArrayList B=calcule.methode();
les deux thread exicute en paralle
puis
thread3 qui fait
while (thread1 !=null &&)
{
try {
this.sleep(100);
}
catch (Exception G) {}
}
}
ArrayList C =new Arraylist();
C.add(A);
C.add(B);
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201339 25 mai 2007 à 21:44
Salut Ulysse:
Si j'ai bien compris ta problématique, tu veux exécuter deux threads en paraléles pour remplir les deux ArrayList A et B un fois ceci est terminé, on créer un troisième ArrayList C qui est la fusion de ces deux ArrayList.
ça semble à un programme producteur/consommateur.
Je vais essayer pour te trouver une solution (ICA).
ArrayList A = new ArrayList ();
public ArrayList getResultat(){
A.add("ulysse");
A.add("ulysse1");
return(A);
}
publicvoid run(){
{
Iterator IT = A.iterator();
while(IT.hasNext()){
A.add(IT.next());
}
}
}
}
class ThreadB extends Thread {
ArrayList B = new ArrayList ();
public ArrayList getResultat(){
B.add("ulysse3");
return(B);
}
publicvoid run()
{
Iterator IT = B.iterator();
while(IT.hasNext()){
B.add(IT.next());
}
}
}
publicclass thread1 {
publicstatic ArrayList calculParallele(){
ArrayList C = new ArrayList();
ThreadA ta = new ThreadA();
ThreadB tb = new ThreadB();
ta.start();
tb.start();
while(ta.isAlive() && tb.isAlive()){
try{
// on attend 100ms avant de retester
Thread.sleep(100);
}catch(InterruptedException e){
// on ne fait rien
}
}
Iterator IT = ta.getResultat().iterator();
while(IT.hasNext()){
C.add(IT.next());
}
IT = tb.getResultat().iterator();
while(IT.hasNext()){
C.add(IT.next());
}
return(C);
}
}
j'ai doute avec run() de ThreadA et ThreadB est ce que c'est just
et est ce que les deux threadA et B fonctionne en parallele
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201339 26 mai 2007 à 14:08
Salut:
Vaut miex mettre les sleep () dans les boucles de la méthode run que de faire ceci dans la boucle de blocage.
final ArrayList<String> arrayA = new ArrayList<String> ();
Thread ta = new Thread () {
public void run () {
int i = 0;
while ( i < 10 ) {
arrayA.add ("quelque chose");
++i;
System.out.println ("Ici Thread 1 ...");
}
}
};
final ArrayList<String> arrayB = new ArrayList<String> ();
Thread tb = new Thread () {
public void run () {
int i = 0;
while ( i < 20) {
arrayB.add ("quelque chose");
++i;
System.out.println ("Ici Thread 2 ...");
}
}
};
ta.start ();
tb.start ();
while (ta.isAlive () || tb.isAlive ()) {
System.out.println ("Nous somme tous les deux bloqués ...");
}
System.out.println ("Enfin nous sommes libres ...");
ulysse00
Messages postés292Date d'inscriptionlundi 6 novembre 2006StatutMembreDernière intervention12 mai 20131 26 mai 2007 à 14:34
salut ami merci pour la remarque .
mais j'ai encore soucis avec chaque thread a et b
par exemple
class ThreadA extends Thread { ArrayList A = new ArrayList ();
public ArrayList getResultat(){
A.add("ulysse");
A.add("ulysse1");
return(A);
}
publicvoid run(){
{
je voulais mettre quelque chose dans run mais je ne sais pas quoi je mettre
}
}
}
et en plus je voulais rie toucher je garde cette partie
public ArrayList getResultat(){
A.add("ulysse");
A.add("ulysse1");
return(A);
}
modifier just run
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201339 27 mai 2007 à 00:10
Salut:
Je commence à ne pas comprendre ce que tu veux faire.
Dire Thread c'est dire la méthode run () si tu ne vas pas mettre du code dans cette méthode alors pourquoi utiliser les threads c'est inutile.
ulysse00
Messages postés292Date d'inscriptionlundi 6 novembre 2006StatutMembreDernière intervention12 mai 20131 27 mai 2007 à 00:44
bonsoir
est ce que il y a une autre méthodes dans run de mes threads car je ne sais pas quoi mettre dans run de chaque thread a et b j'ai doute avec run de thread a et b