![]() Koda in podatki |
![]() Tek programa: ena nit |
![]() Dve niti |
![]() |
Večnitnost je eden osnovnih konceptov Jave. V vsaki Java aplikaciji ali apletu lahko paralelno teče več niti, ki si delijo procesorski čas; | ||||||
![]() |
Java podpira kontrolo nad nitmi (zaganjanje, ustavljanje,...), kot tudi kontrolo nad prioriteto izvajanja posameznih niti; | ||||||
![]() |
nit
lahko v Javi naredimo:
|
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Nit1 extends Applet implements Runnable {
Thread nit=null;
int w, h;
int x, y;
int radius = 20;
int dx , dy;
//***************************************************
public void init(){
x = radius; y = radius;
dx
= 1; dy = 1;
w
= this.getSize().width;
h
= this.getSize().height;
}
//***************************************************
public void paint(Graphics g){
g.setColor(Color.blue);
g.fillRect(0,0,w,h);
g.setColor(Color.yellow);
g.fillOval(x-radius,y-radius,
2*radius, 2*radius);
}
//*****************************************************
public void start(){
if(nit==null){
nit
=new Thread(this);
nit.start();
}
}
//*****************************************************
public void run(){
while(nit != null){
try {Thread.sleep(10);}catch(InterruptedException
e){}
x = x + dx;
y = y + dy;
if (x > (w - radius))
{
x = w - radius; dx = -1;
}
if (y > (h - radius))
{
y = h - radius; dy = -1;
}
if (x < radius)
{
x = radius; dx = 1;
}
if (y < radius)
{
y = radius; dy = 1;
}
repaint();
}
}
//*****************************************************
public void stop(){
if(nit != null) nit.stop();
nit=null;
}
}
Primer aplikacije, ki poleg main ustvari
še pet niti, od katerih vsaka izpisuje števila od 1000 do 0. Z opazovanjem
izpisa lahko vidimo, kako JVM preklaplja med nitmi.
class SimpleThread extends Thread { // razred niti private int countDown = 1000; private int threadNumber; private static int threadCount = 0; public SimpleThread() { // v konstruktorju si le zapomnimo številko niti, da jih razlikujemo med seboj threadNumber = ++threadCount; System.out.println("Making " + threadNumber); } public void run() { // run vsebuje kodo niti; tu preprosto izpisujemo števila v zanki for (int i=countDown;i>=0;i--) { System.out.println("Thread " + threadNumber + "(" + i + ")"); } } } class test { public static void main(String[] args) { for(int i = 0; i < 5; i++) // ko naredimo instanco nitnega razreda, in pokličemo start se nit zažene - izvede se metoda run new SimpleThread().start(); System.out.println("All Threads Started"); } }