На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Следующие правила действуют в данном разделе в дополнение к общим Правилам Форума
1. Здесь обсуждается Java, а не JavaScript! Огромная просьба, по вопросам, связанным с JavaScript, SSI и им подобным обращаться в раздел WWW Masters или, на крайний случай, в Многошум.
2. В случае, если у вас возникают сомнения, в каком разделе следует задать свой вопрос, помещайте его в корневую ветку форума Java. В случае необходимости, он будет перемещен модераторами (с сохранением ссылки в корневом разделе).

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
  
> Работа с потоками
    Вроде все правильно делаю, подскажите пожалуйста почему не работает?

    ExpandedWrap disabled
      public class wwww {
          myMetod myMet;
          public static void main(String[] args)
          {
              myMetod myMet = new myMetod();
              for(int i=1;i<10000;i++)
              {i++;}
              myMet.notify();    
              for(int i=1;i<10000;i++)
              {i++;}
              myMet.notify();
              for(int i=1;i<10000;i++)
              {i++;}
              myMet.notify();
          }
       
      }
      public class myMetod implements Runnable
      {
          int i;
          Thread myThread;
          public  myMetod()
          {
          
              myThread = new Thread(this, "potok");
              myThread.start();
          }
          public void run()
          {
              while(i<2)
                  synchronized(this){
              try{
              myThread.wait();}
              catch(InterruptedException e){;}
              i=i+1;
              System.out.println(i);}
              
          }
          public static void main(String[] args)
          {
              new myMetod();
          }
       
      }
    Сообщение отредактировано: wind -
      Скрытый текст
      кошмар :ph34r:
        ???

        Добавлено
        очень подробный ответ :D
          ExpandedWrap disabled
            public class wwww {
                myMetod myMet;
                public static void main(String[] args)
                {
                    myMetod myMet = new myMetod();
                    for(int i=1;i<10000;i++)
                    {i++;}
                    myMet.notify();    
                    for(int i=1;i<10000;i++)
                    {i++;}
                    myMet.notify();
                    for(int i=1;i<10000;i++)
                    {i++;}
                    myMet.notify();
                }
             
            }
            public class myMetod implements Runnable
            {
                int i;
                Thread myThread;
                public  myMetod()
                {
                
                    myThread = new Thread(this, "potok");
                    myThread.start();
                }
                public void run()
                {
                    while(i<2)
                        synchronized(this){
                    try{
                    myThread.wait();}
                    catch(InterruptedException e){;}
                    i=i+1;
                    System.out.println(i);}
                    
                }
                public static void main(String[] args)
                {
                    new myMetod();
                }
             
            }




          так? :)
            Цитата nataly_ @
            так?

            :yes:

            В вашем примере всё делается не совсем правильно. Цикл и вызов myMethod.notify() скорее всего успевают сработать прежде, чем поток запускается и останавливается на вызове wait(). Следует сначала удостовериться в том, что поток запустился и ожидает результата. И вообще, рекомендую использовать класс Semaphore (java 1.5+).
              Нет, все равно не работает я просто написала маленькую программу для примера, сейчас напишу чуть-чуть подробнее:
              ExpandedWrap disabled
                import java.awt.FlowLayout;
                import java.awt.event.KeyEvent;
                import java.awt.event.KeyListener;
                import javax.swing.JFrame;
                import javax.swing.JTextArea;
                 
                 
                public class wwww extends JFrame
                implements KeyListener{
                    public wwww()
                    {
                        setSize(280,400);
                        setDefaultCloseOperation(this.EXIT_ON_CLOSE);
                        getContentPane().setLayout(new FlowLayout());
                        getContentPane().add(myInputTextArea);
                        setVisible(true);
                        init();
                    }
                    myMetod myMet;
                    public static JTextArea myInputTextArea=new JTextArea(4,22);
                    public static synchronized void main(String[] args)
                    {
                        new wwww();
                        myMetod myMet = new myMetod();
                        
                    }
                    public void init()
                    {myInputTextArea.addKeyListener(this);}
                    public void keyPressed(KeyEvent ke)
                    {;}
                    public void keyTyped(KeyEvent ke)
                    {;
                    }
                    public void keyReleased(KeyEvent ke)
                    {
                        char c;
                        c=ke.getKeyChar();
                        if (c  == '\n')
                        {myMet.notify();}
                        
                    }
                 
                }
                 
                 
                 
                 
                 
                 
                 
                 
                public class myMetod implements Runnable
                {
                    int i;
                    Thread myThread;
                    public  myMetod()
                    {
                    
                        myThread = new Thread(this, "potok");
                        myThread.start();
                    }
                    public void run()
                    {
                        while(i<2)
                            synchronized(this){
                        try{
                        myThread.wait();}
                        catch(InterruptedException e){;}
                        i=i+1;
                        System.out.println(i);}
                        
                    }
                    public static void main(String[] args)
                    {
                        new myMetod();
                    }
                    
                 
                }
                Цитата nataly_ @
                Нет, все равно не работает

                Что не работает?

                ExpandedWrap disabled
                  public class ThreadSample {
                   
                      public static void main(String... args) {
                          Waiter waiter = new Waiter(3);
                          waiter.start();
                          
                          for (int i = 0; i < 1000000000; i++);
                          
                          System.out.println("1st completed");
                          waiter.lock().release();
                   
                          for (int i = 0; i < 1000000000; i++);
                          
                          System.out.println("2nd completed");
                          waiter.lock().release();
                   
                          for (int i = 0; i < 1000000000; i++);
                          
                          System.out.println("3rd completed");
                          waiter.lock().release();
                      }
                      
                  }
                   
                  class SimpleLock {
                      
                      private int locks;
                      
                      public SimpleLock(int locks) {
                          this.locks = locks;
                      }
                      
                      public synchronized void acquire() throws InterruptedException {
                          while (locks > 0) {
                              wait();
                          }
                      }
                      
                      public synchronized void release() {
                          if (locks > 0) {
                              notify();
                              locks--;
                          }
                      }
                   
                  }
                   
                  class Waiter implements Runnable {
                   
                      private SimpleLock lock;
                      
                      public Waiter(int count) {
                          lock = new SimpleLock(count);
                      }
                      
                      public void start() {
                          Thread thread = new Thread(this);
                          thread.start();
                      }
                      
                      public SimpleLock lock() {
                          return lock;
                      }
                      
                      public void run() {
                          try {
                              lock.acquire();
                          }
                          catch (InterruptedException thrown) {
                              thrown.printStackTrace();
                              return;
                          }
                          
                          System.out.println("all completed");
                      }
                      
                  }
                  спасибо :)
                  1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0378 ]   [ 14 queries used ]   [ Generated: 20.05.24, 04:50 GMT ]