Scusate l'ignoranza ma io sapevo fosse il processore stesso a gestire tutti i core presenti in esso e la suddivisione delle istruzioni, ma ora sono un po confuso. Stiamo studiando i thread all'università e ho fatto una piccola classe per testare il funzionamento dei core del mio computer (ho 4 core, 8 thread).
codice:
package others;

public class MulticoreTest{
	
	public  MulticoreTest(){
		
	}
	
	private class Test implements Runnable{
		
		private int num = 0;
		private boolean run = true;
		private int code = 0;
		private Thread t;
		
		public Test(int code){
			this.code = code;
		}
		
		@Override
		public void run(){
			while(true){
				System.out.println(this.getClass().getSimpleName()+ code + " " + num++);
			}
		}
		
		public void start(){
			t = new Thread(this);
			t.start();
		}
	}
	
	public static void main(String args[]){
		int n = 10;
		MulticoreTest x = new MulticoreTest();
		Runnable threads[] = new Runnable[n];
		for(int i = 0; i < n; i++){
			threads[i] = x.new Test(i);
			((Test) threads[i]).start();
		}
	}
}
Da come ha detto il professore, se avessimo provato a fare qualcosa del genere su un multicore, avremo visto i messaggi dai vari thread sovrapporsi di continuo... invece quello che ho notato io è che sul mio computer funziona con il normale time slicing: cioè un thread ha la possibilità di incrementare la sua variabile interna e stamparla a video circa 50 volte prima che sia tolto dalla cpu... ho capito male io oppure c'è qualcosa che non va?