Olá pessoal.
Já pesquisei no GUJ e no GOOGLE por algo que pudesse me ajudar com esta dúvida mas não encontrei nada esclarecedor o suficiente.
Bom a dúvida é a seguinte: como saber ( através de testes ) se o escalonador em uma plataforma utiliza timeslicing ou não.
Compilei o código abaixo utilizando primeiramente uma saída COM buffer ( System.out.println ).
Deste modo, a saída acabava me indicando que na plataforma que estou utilizando (Linux), não era suportado o timeslicing,
pois a primeira thread era executada até o fim e então a segunda thread começava a trabalhar.
Porém, depois realizei o teste utilizando saída SEM buffer ( System.err.println ), e o resultado foi diferente.
Agora algumas vezes o resultado sai intercalado e outras o resultado sai como no teste bufferizado.
Agora tudo indica p/ mim que no Linux, é suportado o timeslicing. Esta última saída do programa foi confiável? existe outra maneira de descobrir isto???
Obrigado.
Código da thread
public class PrintThread extends Thread
{
public PrintThread( String name ) {
super( name );
System.out.println( "Name:" + getName() );
}
@Override
public void run() {
java.util.Date d;
Timestamp ts;
d = new java.util.Date();
ts = new Timestamp( d.getTime() );
System.err.println( getName() + " STARTED RUNNING AT: " + ts.getTime() );
for(int i = 0; i < 5; i++) {
for(int j = 0; j < 300000000; j++) {}
System.err.println( getName() + " " + i );
}
d = new java.util.Date();
ts = new Timestamp( d.getTime() );
System.err.println( getName() + " FINISHED AT: " + ts.getTime() );
}
}
Código que utiliza as threads
public class ThreadTester {
private static final int threads = 2;
public static void main(String[] args) {
java.util.Date d;
Timestamp ts;
PrintThread t[] = new PrintThread[ ThreadTester.threads ];
for( int i = 0; i < ThreadTester.threads; i++ ) {
t[ i ] = new PrintThread( "thread " + i );
}
for( int i = 0; i < ThreadTester.threads; i++ ) {
d = new java.util.Date();
ts = new Timestamp( d.getTime() );
System.err.println( t[ i ].getName() + " STARTED AT MAIN THREAD AT: " + ts.getTime() );
t[ i ].start();
}
d = new java.util.Date();
ts = new Timestamp( d.getTime() );
System.err.println( "END OF MAIN AT: " + ts.getTime() );
}
}