So for my final in Java me and my friend made snake, heres the link:
http://myspace-source.com/snake/
Heres the code:
Code:
import java.applet.*;
import java.awt.*;
import java.util.Random;
import java.applet.Applet;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import java.awt.Font;

    
public class snake extends Applet implements Runnable
{
Random generator = new Random();
    int x_pos = 30;       
    int y_pos = 100;       
    int x_speed = 0;       
    int y_speed = 0;
    int radius = 5;      
    int appletsize_x = 500;
    int appletsize_y = 500;
    int x_apple = 250;
    int y_apple = 250;
    int nsnake = 1;
    int sdir = 2;
    int GameOver = 0;
    int level= 1;
    int start = 1;
    int high = 1;
        private Image dbImage;
    private Graphics dbg;
    private Image startimg;
    private Image gameoverimg;
  
    int[] x_posa, y_posa,s_dir,x_posa2,y_posa2,s_dir2,emptyarr;                                  

                                           
  
    public snake(){
        s_dir = new int[10000];
        x_posa = new int[10000];
        y_posa = new int[10000];
        emptyarr = new int[1000];
        x_posa[0] = x_pos;
        y_posa[0] = y_pos;
        s_dir[0] = sdir;
    }

    public void init()
    {
        startimg = getImage(getCodeBase(),"caterpillar.gif");
        gameoverimg = getImage(getCodeBase(),"owned.gif");
    }
    
    public void start ()
    {
       
        Thread th = new Thread (this);
      
        th.start ();
    }

    public void stop()
    {
  
    }

    public void destroy()
    {

    }

   
   public boolean keyDown (Event e, int key)
    {
   
      if (key == Event.LEFT && sdir != 2)
        {
            // Ball bewegt sich dann nach links
            x_speed = -5;
            y_speed = 0;
            sdir = 1;
            start = 0;
            GameOver = 0;
        }
                   else if (x_posa[0] > appletsize_x - radius)
            {
                // Ändern der Richtung des Balles
                x_speed = 0;
            }
        // rechte Cursortaste
        else if (key == Event.RIGHT && sdir != 1)
        {
            // Ball bewegt sich dann nach rechts
            x_speed = 5;
            y_speed = 0;
            sdir = 2;
            start = 0;
            GameOver = 0;
        }
        else if (x_posa[0] > appletsize_x - radius)
            {
                // Ändern der Richtung des Balles
                x_speed = 0;
            }
       
        else if (key == Event.DOWN && sdir != 3 )//if key = s go down
        {
           
    y_speed = 5;
    x_speed = 0;
    sdir = 4;
    start = 0;
    GameOver = 0;
        }
                else if (y_posa[0] > appletsize_y)
    {
        y_speed = 0;
    }
        else if (key == Event.UP  && sdir != 4)//if key = w go up
        {
            y_speed = -5;
            x_speed = 0;
            sdir=3;
            start = 0;
            GameOver = 0;
        }
        else if (y_posa[0] < 0)
            {
                y_speed = 0;
            }  
       
       
        else
        {
            // Ausgabe von gedrüktem Key und Zahlenwert an die Standardausgabe
            System.out.println ("Charakter: " + (char)key + " Integer Value: " + key);
        }

        return true;
    }
   
   
    public boolean mouseDown (Event e, int x, int y)
    {    
   return true;
    }

    public void run()
    {
          
        Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

      
        while (true)
        {
            if (x_posa[0] <= x_apple+10 && x_posa[0] >= x_apple-10) //user's mover hit powerup
            {
              if (y_posa[0] <= y_apple+10 && y_posa[0] >= y_apple-10)
            {
               nsnake++;
               if(s_dir[nsnake-2] == 1)
               {
               x_posa[nsnake-1] = x_posa[nsnake-2] - 10;
               y_posa[nsnake-1] = y_posa[nsnake-2];
               s_dir[nsnake-1] = s_dir[nsnake-2];
               }
              if(s_dir[nsnake-2] == 2)
               {
               x_posa[nsnake-1] = x_posa[nsnake-2] + 10;
               y_posa[nsnake-1] = y_posa[nsnake-2];
               s_dir[nsnake-1] = s_dir[nsnake-2];
               }
               if(s_dir[nsnake-2] == 3)
               {
               x_posa[nsnake-1] = x_posa[nsnake-2];
               y_posa[nsnake-1] = y_posa[nsnake-2]-10;
               s_dir[nsnake-1] = s_dir[nsnake-2];
               }               
               if(s_dir[nsnake-2] == 4)
               {
               x_posa[nsnake-1] = x_posa[nsnake-2];
               y_posa[nsnake-1] = y_posa[nsnake-2]+10;
               s_dir[nsnake-1] = s_dir[nsnake-2];
               }               
               makeApple();
               
            }
            }
            if (x_posa[0] > appletsize_x - radius)
            {
                // Ändern der Richtung des Balles
                GameOver = 1;
            }
            // Ball brührt linken Rand und prallt ab
            else if (x_posa[0] < radius)
            {
                // Ändern der Richtung des Balles
                GameOver = 1;
            }

            // Verändern der x- Koordinate
          
           
            if (y_posa[0] > appletsize_y - radius)
            {
                // Ändern der Richtung des Balles
                GameOver = 1;
            }
            // Ball brührt linken Rand und prallt ab
            else if (y_posa[0] < radius)
            {
                // Ändern der Richtung des Balles
                GameOver = 1;
            }
                 if(nsnake == 1){
       x_posa[0] = x_posa[0] + x_speed;
       y_posa[0] = y_posa[0] + y_speed;
       s_dir[0] = sdir;
    }
    
    else if(nsnake > 1)
    {
        x_posa2 = x_posa;
        y_posa2 = y_posa;
        s_dir2 = s_dir; 
    for (int i = nsnake;i > 0;i--)
    {
        x_posa[i] = x_posa2[i-1];
        y_posa[i] = y_posa2[i-1];
        s_dir[i] = s_dir2[i-1];

    }
           x_posa[0] = x_posa2[0] + x_speed;
       y_posa[0] = y_posa2[0] + y_speed;
       s_dir[0] = sdir;
    }
    if (nsnake > 10)
    {
        
       for (int i= 10; i < nsnake; i++)
    {
    if(x_posa[0] == x_posa[i] && y_posa[0] == y_posa[i])
    {
        GameOver=1;   
    }
    
    }
}

    
    
   

            repaint();

            try
            {
              
                Thread.sleep (20); //pause for movement
            }
            catch (InterruptedException ex)
            {
                // do nothing
            }
            Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
        }
       
             
    }
   
    public void update (Graphics g)
    {
        // Initialisierung des DoubleBuffers
        if (dbImage == null)
        {
            dbImage = createImage (this.getSize().width, this.getSize().height);
            dbg = dbImage.getGraphics ();
        }

        // Bildschirm im Hintergrund löschen
        dbg.setColor (getBackground ());
        dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);

        // Auf gelöschten Hintergrund Vordergrund zeichnen
        dbg.setColor (getForeground());
        paint (dbg);

        // Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm anzeigen
        g.drawImage (dbImage, 0, 0, this);
       
    }

    public void paint (Graphics g)
    {          
      g.setColor  (Color.green);

      for(int i = 0;i<nsnake;i++)
      {
      g.fillOval (x_posa[i] - radius, y_posa[i] - radius, 2 * radius, 2 * radius);
    }  
      g.setColor (Color.red);
        g.fillOval (x_apple - radius, y_apple - radius, 2 * radius, 2 * radius);
        g.setColor(Color.black);
        g.drawString("Points: "+ nsnake, 5, 475);
        g.drawString("High Score: "+ high, 5, 495);
        if (start == 1)
        {
          g.drawImage(startimg,50,50,this);
        }
        
        if (GameOver == 1)
        {
            if(nsnake > high )
            {   
           high = nsnake;
        }
           x_speed =0;
           y_speed =0;
           nsnake=1;
        x_pos = 30;
        y_pos = 100;
        sdir = 2;
         x_posa[0] = x_pos;
        y_posa[0] = y_pos;
        s_dir[0] = sdir;
        g.drawImage(gameoverimg,100,50,this);
        }
       

}
    public void makeApple(){
        x_apple = generator.nextInt(96)*5+10;                     /*set random position*/
        y_apple = generator.nextInt(96)*5+10;
    }

}
The game runs fine on his computer. When I run it on mine, it runs for about 6 seconds, pauses for 1 second, then keeps going, and repeating that process.

On his computer it goes without pausing the whole game.

I think it has something to do with our thread setup, but I don't know what it is. Any ideas?