|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Messaggi: n/a
|
java e thread domanda
ciao a tutti
sto al punto sui thread. due domande. ad un certo punto dopo aver fatto notare come creare un thread a partire da un implementazione di Runnable fa vedere il metodo alternativo basato su extend di Thread. in particolare public class CounterTrhead extends Thread ........ override di run() e poi istanzio CounterThread thread=new CounterThread(); thread.start(); ok mi è chiaro perchè Thread implementa a sua volta Runnable. quello che non ho capito è ciò che dice dopo ovvero preferire l'implementazione di Runnable per 3 motivi di cui due li ho capito uno no: "solitamente un oggetto della classe Thread non dovrebbe possedere variabili di istanza private che rappresentano i dati da gestire. quindi il metodo run() nella sottoclasse di thread non potrà accedere, in maniera pulita, a tali dati" cosa significa? seconda domanda..... i thread in generale condividono i dati (cosi dice la teoria) ma in cosa consiste questa condivisione di dati? ovvero che se dichiaro e creo un thread dal thread principale, il thread figlio potrà leggere e usare le variabili del thread principale?? mi fate se possibile un esempio? |
|
|
|
#2 | ||
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Se lo contatti, facci sapere. Quote:
Esempio - questo codice crea 10 thread che accedono tutti alla stessa variabile counter, incrementandone il valore e stampandola. E' un tipico caso di accesso ad una risorsa condivisa (la variabile counter, appunto). L'accesso alle risorse condivise normalmente viene regolato, come nel caso in cui piu' persone (thread) vogliano usare il bagno (risorsa). E' opportuno che ci si metta d'accordo e che lo si usi uno alla volta, giusto? Nel frattempo, le altre persone possono fare altro. In questo esempio, non c'e' nulla che regoli l'accesso alla variabile counter, perche' hai chiesto un esempio in cui piu' thread condividono le stesse variabili. Ma immagino che il risultato non sia quello che ti aspetti... Codice:
class Test implements Runnable
{
private int counter = 0;
@Override
public void run()
{
try
{
for (int i = 0; i < 5; i++)
{
counter++;
System.out.println(Integer.toString(counter));
Thread.sleep(500);
}
}
catch (InterruptedException e)
{
System.out.println("Thread interrupted");
}
}
public static void main(String[] args)
{
Runnable r = new Test();
for (int i = 0; i < 10; i++)
{
new Thread(r).start();
}
}
}
__________________
In God we trust; all others bring data |
||
|
|
|
|
|
#3 |
|
Messaggi: n/a
|
ok grazie mi è chiara la tua spiegazione sul secondo punto.
contatto spesso l'autore lo ammetto ma faccio finta di aver capito quello che ha scritto sulla prima fa nulla grazie! |
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:25.




















