Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Потоки


Автор: Neox_GeForce 17.1.2010, 15:08
Есть некая задача смоделировать процессы ОС.
Суть в том что нужно сделать 2 потока которые генерируют процесы(В моем случае числа)
Код

import java.util.Random;

/**
 * Created by IntelliJ IDEA.
 * User: Администратор
 * Date: 17.01.2010
 * Time: 11:04:40
 * To change this template use File | Settings | File Templates.
 */
public class Proccess extends Thread{

    private int numberProccess =0; //номер процесса
    private int proccessed1=0,destroyed=0; //количество уничтожених и  успешных процессов
    private boolean run=true;
    public volatile  boolean  proccessed=false; //исполнился ли процесс
    public int getNumber(){
        return this.numberProccess;
    }


    public Proccess(int numberProccess,String name) {
        this.numberProccess = numberProccess;

        this.setName(name);

    }

    public boolean isRun() {
        return run;
    }

    public void setRun(boolean run) {
        this.run=run;
    }
      public void run(){
        System.out.println("Start " +this.getName()+   " proccess");
          while(run){

              for(int i=0;i<numberProccess;i++) {
System.out.println(this.getName()+" :generated "+i); //Генерирую процесс
                  proccessed=false; //Он не завершился
                  try {
                      Thread.sleep((long) (Math.random()*1000)); //Жду
                  } catch (InterruptedException e) {
                      e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                  }


                  if(proccessed=true) {proccessed1++;proccessed=false;} else destroyed++; // (обычние счетчики)


              }

              this.setRun(false);
System.out.println(this.getName()+"  proccessed :"+proccessed1 +"  Destroyed :"+destroyed); //Результаты




       } }


}



Также я смоделировал процессор который обрабатывает потоки

Код

/**
 * Created by IntelliJ IDEA.
 * User: Администратор
 * Date: 17.01.2010
 * Time: 11:05:00
 * To change this template use File | Settings | File Templates.
 */
public class CPU extends Thread{
    private Proccess first,second;


    public CPU(Proccess first, Proccess second) {
        this.first = first;
        this.second = second;
        first.setPriority(Thread.MAX_PRIORITY); //Эта для теста
        first.start(); //запускаем поток 1
        second.start();
    }

    public void run() {
        while (first.isAlive() || second.isAlive()) {
    
            try {


            first.proccessed=true //исполнить процес  первого потока                  ;
                System.out.println(first.getName()+" proccessed "+first.getNumber());
                Thread.sleep((long) (Math.random()*8000)); //Подождать
                second.proccessed=true; //Исполнить процес второго потока
                System.out.println(second.getName()+" proccessed "+second.getNumber());

} catch (InterruptedException e) {
                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
            }
        }

    }
}



Код

/**
 * Created by IntelliJ IDEA.
 * User: Администратор
 * Date: 17.01.2010
 * Time: 11:04:24
 * To change this template use File | Settings | File Templates.
 */
public class Main {
    public static void main(String[] args){
        Proccess ft=new Proccess(5, "First");
        Proccess st=new Proccess(5, "Second");
        CPU cpu=new CPU(ft,st);
        cpu.run();

    }
}




Если у потоков которые генерируют процессы задержка намного меньше  а у  потока который их обрабатывает она побольше то почему  результаты такие, ни один процес не уничтожается.
Код

First proccessed 5
Start First proccess
First :generated 0
Start Second proccess
Second :generated 0
First :generated 1
First :generated 2
Second :generated 1
First :generated 3
Second proccessed 5
First proccessed 5
Second :generated 2
Second :generated 3
First :generated 4
Second :generated 4
Second  proccessed :5  Destroyed :0
First  proccessed :5  Destroyed :0
Second proccessed 5


Автор: powerOn 17.1.2010, 15:35
Модератор: Название темы должно отражать ее суть!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)