appel des threads dans une boucle while - Java - Programmation
Marsh Posté le 02-04-2007 à 11:10:44
si la valeur de condition ne change pas, c'est normal que tu boucles.
Spoiler : avec tous les détails précis que tu donnes, y a pas mieux comme réponse. |
Marsh Posté le 02-04-2007 à 11:38:01
je sais çaaaaaaaaaa! la condition ne change pas parce que l'execution de ces trois threads ne se termine pas;
qu'est ce que je peux ajouter aux codes de ces threads ?
Marsh Posté le 02-04-2007 à 13:00:21
non, mais c'est bien, donne surtout aucun détails de ton code.
Je te répondrai dés que j'aurai mis la main sur une boule de cristal en état de marche ou un jeu de tarot.
Marsh Posté le 02-04-2007 à 13:24:31
/*******************************envoi au client1************************************/
public static void emission(){
class inter1 extends Thread
{
/************************************/
private boolean arretDesQuePossible=false;
private Thread thread;
String l1 = String.valueOf(l);
String l2 = String.valueOf(k00-1);
String z = String.valueOf(zz);
String nb0 = String.valueOf(nb1);
String tr11 = String.valueOf(100);
BufferedReader canalLecture1;
PrintStream canalEcriture1;
BufferedReader canalLecture;
PrintStream canalEcriture;
ServerSocket ecoute;
Socket ss=null;
Socket client=null;
DataInputStream in=null;
PrintStream out=null;
Connection con = null;
ResultSet resultats = null;
Statement stmt;
/*************************************/
public void connexion(){
// chargement du pilote
try {
Class.forName("org.gjt.mm.mysql.Driver" ).newInstance();
}
catch (Exception e)
{
arret("Impossible de charger le pilote jdbc pour mySQL" );
}
//connection a la base de données
affiche("connection a la base de donnees" );
try {
String DBurl = "jdbc:mysql://localhost/test?user=root";
con = DriverManager.getConnection(DBurl);
}
catch (SQLException e)
{
arret("Connection a la base de donnees impossible" );
}
// affiche("creation et execution de la requete" );
try {
stmt = con.createStatement();
resultats = stmt.executeQuery("SELECT * FROM zoo" );
}
catch (SQLException e)
{
arret("Anomalie lors de l'execution de la requete" );
}
try {
Statement stmt10 = con.createStatement();
ResultSet res5 = stmt10.executeQuery("select count(*) from zoo" );
boolean encore = res5.next();
int i2=0;
while (encore)
{
total= res5.getInt("count(*)" );
encore = res5.next();
i2++;
}
}
catch (SQLException e)
{
arret("Anomalie lors de l'execution de la requete******" );
}
}
/*************************************/
public void affiche(String message) {
System.out.println(message);
}
/*****************************************/
public void arret(String message) {
System.err.println(message);
System.exit(99);
}
/******************************************/
inter1 ( ) {
thread = new Thread(this);
}
public void demarrageEnParallele() {
thread.start();
}
public void attenteArretEffectif() {
try {
thread.join();
} catch (Exception e) { System.out.println("Le thread emission est mort" );
// veut-on toujours remonter l'exception ?
}
}
public void run ( )
{
//isRunning=true;
// while(isRunning){
try {
ok1=true;
f1=100;
occup[1]=0;
ss= new Socket( InetAddress.getByName("sabrina" ), 10 );
System.out.println("1111111111111111111111111111" );
canalLecture1= new BufferedReader(new InputStreamReader(ss.getInputStream()));
canalEcriture1=new PrintStream(ss.getOutputStream());
System.out.println("connexion etablie: "+ss.getInetAddress()+ " port: "+ ss.getPort());
canalEcriture1.println(l1);
l1=canalLecture1.readLine();
System.out.println("Le niveau :"+l1);
canalEcriture1.println(nb0);
nb0=canalLecture1.readLine();
System.out.println("la condition d'arret :"+nb0);
if(l==1)
{
canalEcriture1.println(tr11);
tr11=canalLecture1.readLine();
System.out.println("tr1="+tr1);
System.out.println("ddddddddddddddddddddddddddd" );
connexion();
stmt = con.createStatement();
resultats = stmt.executeQuery("SELECT * from zoo where id>0 and id<='"+f1+"' " );
i=1;
boolean encore = resultats.next();
while (encore)
{
int col1 = resultats.getInt("c1" );
int col2 = resultats.getInt("c2" );
int col3 = resultats.getInt("c3" );
int col4 = resultats.getInt("c4" );
int col5 = resultats.getInt("c5" );
int col6 = resultats.getInt("c6" );
int col7 = resultats.getInt("c7" );
int col8 = resultats.getInt("c8" );
int col9 = resultats.getInt("c9" );
int col10 = resultats.getInt("c10" );
String col1s = String.valueOf(col1);
String col2s = String.valueOf(col2);
String col3s = String.valueOf(col3);
String col4s = String.valueOf(col4);
String col5s = String.valueOf(col5);
String col6s = String.valueOf(col6);
String col7s = String.valueOf(col7);
String col8s = String.valueOf(col8);
String col9s = String.valueOf(col9);
String col10s = String.valueOf(col10);
canalEcriture1.println(col1s);
col1s=canalLecture1.readLine();
System.out.println("cl1+client1="+col1s);
canalEcriture1.println(col2s);
col2s=canalLecture1.readLine();
System.out.println("cl2+client1="+col2s);
canalEcriture1.println(col3s);
col3s=canalLecture1.readLine();
System.out.println("cl3+client1="+col3s);
canalEcriture1.println(col4s);
col4s=canalLecture1.readLine();
canalEcriture1.println(col5s);
col5s=canalLecture1.readLine();
canalEcriture1.println(col6s);
col6s=canalLecture1.readLine();
canalEcriture1.println(col7s);
col7s=canalLecture1.readLine();
canalEcriture1.println(col8s);
col8s=canalLecture1.readLine();
canalEcriture1.println(col9s);
col9s=canalLecture1.readLine();
canalEcriture1.println(col10s);
col10s=canalLecture1.readLine();
encore = resultats.next();
i++;
}
occup[1]=1;
try{
ss.close();
System.out.println("ss 1 est terminée******" );
}
catch (Exception ee){
ee.printStackTrace(); System.out.println("ss 1 n' est pas terminée******" );
}
reception();
ok1=false;
}
else
if((l<=10)&&(zz!=0))
{
canalEcriture1.println(l2);
l2=canalLecture1.readLine();
System.out.println("Le nombre des mots à creer+client1 :"+l2);
l2="";
for(int i=1;i<=k00-1; i++){
canalEcriture1.println(concat[i]);
concat[i]=canalLecture1.readLine();
System.out.println("les colonnes à calculer+client1="+concat[i]);
}
occup[1]=1;
reception();
ok1=false;
}
else if((zz==0))
{
canalEcriture1.println(z);
z=canalLecture1.readLine();
System.out.println("Merci le travail est fini " );
labeletat1=new JLabel("CLIENT 1 EST LIBRE" );
occup[1]=1;
}
}
catch (Exception ee){
ee.printStackTrace(); System.out.println("erreur+client1***************" );
}
//*************************/
finally
{
if (ss != null)
{
try{
ss.close();
ss = null;
}
catch (Exception ee){System.out.println("non ferme1" );}
}
for (int i = 0; i < 30; i++) {
if (arretDesQuePossible) {
return; // Termine le thread
} else {
try {
Thread.sleep(100); // Mise en sommeil
} catch (InterruptedException e) {}
}
}
}
}
/**********************************/
public void demandeArretDesQuePossible() {
arretDesQuePossible = false;
}
public void demandeEtAttenteArretDesQuePossible() {
demandeArretDesQuePossible();
attenteArretEffectif();
}
/*****************************************/
}
inter1 activite = new inter1();
activite.demarrageEnParallele();
activite.demandeArretDesQuePossible();
}
c'est le code d'un thread les autres ont le meme code sauf les ports et les @ip sont modifiés;
merci de votre attention
Marsh Posté le 02-04-2007 à 10:34:57
bonjour;
j'ai un problème lors de l'appel des trois threads dans une boucle while;
while(condition){
thread1;
thread2;
thread3;
}
lors d'execution ,le programme boucle d'une manière infinie parce que la condition ne change pas et l'execution des trois threads ne termine pas par exemple:
il execute une instruction de thread1 puis de thread2 puis de thread3 et il reteste la condition sans terminer toute l'execution???????????