Originariamente inviato da sirluca
ciao a tutti sto facendo un esercizio sulla programmazione multithread e non capisco un errore del compilatore
ecco il codice

codice:
package esercizio2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/*
 * 2. Esercizio (Somma) Scrivere un programma multithread in Java che esegue una funzione di somma tra 
 due numeri interi inseriti dall’utente. Creare un thread separato per effettuare la somma e restituire il 
 risultato in una variabile intera (globale) condivisa con il thread principale. Il thread principale deve 
 sincronizzarsi sulla terminazione (join) del thread figlio Somma e stampare poi il risultato a video. 
 [Suggerimento: Per la variabile condivisa, creare una classe involucro HoldInteger con dei metodi get/set.]
 */

public class MyThread implements Runnable {
	private int valore1;
	private int valore2;
	private HoldInteger somma;

	public MyThread(int valore1, int valore2, HoldInteger somma) {
		super();
		this.valore1 = valore1;
		this.valore2 = valore2;
		this.somma = somma;
	}

	@Override
	public void run() {
		somma.setI(valore1 + valore2);
	}

	public class HoldInteger {
		private int i;

		public int getI() {
			return i;
		}

		public void setI(int i) {
			this.i = i;
		}

	}

	public static void main(String[] args) {
		BufferedReader input = new BufferedReader(new InputStreamReader(
				System.in));
		HoldInteger somma = new HoldInteger();

		try {
			int valore1 = Integer.parseInt(input.readLine());
			int valore2 = Integer.parseInt(input.readLine());
		} catch (NumberFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		Thread t = new Thread(new MyThread(valore1, valore2, somma));
		t.start();
		try {
			t.join();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(somma.getI());
	}
}
l' errore è alla riga
codice:
Thread t = new Thread(new MyThread(valore1, valore2, somma));
e dice
e altri errori... di java conosco la programmazione basa e non capisco perchè dovrebbe essere static ..
Forse ti conviene mettere il main in una classe separata, così ti accorgi subito dell'errore

Ad ogni modo, stai cercando di accedere ad un attributo, valore1, da un metodo statico e questo non è permesso (se ragioni sul significato di static capisci subito il perché).

Comunque il tuo problema specifico è un altro: chiedi all'utente valore1 e valore2... Ma queste variabili nascono e muoiono all'interno del blocco try! Quando poi usi valore1 e valore2 per istanziare MyThread, quelle variabili non esistono più! E quindi trova valore1 e valore2 dichiarate a livello di classe, che però non sono utilizzabili perché non statiche...