Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.143.212.121] |
|
Сообщ.
#1
,
|
|
|
Вроде все правильно делаю, подскажите пожалуйста почему не работает?
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(); } } |
Сообщ.
#2
,
|
|
|
Скрытый текст кошмар |
Сообщ.
#3
,
|
|
|
???
Добавлено очень подробный ответ |
Сообщ.
#4
,
|
|
|
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(); } } так? |
Сообщ.
#5
,
|
|
|
Цитата nataly_ @ так? В вашем примере всё делается не совсем правильно. Цикл и вызов myMethod.notify() скорее всего успевают сработать прежде, чем поток запускается и останавливается на вызове wait(). Следует сначала удостовериться в том, что поток запустился и ожидает результата. И вообще, рекомендую использовать класс Semaphore (java 1.5+). |
Сообщ.
#6
,
|
|
|
Нет, все равно не работает я просто написала маленькую программу для примера, сейчас напишу чуть-чуть подробнее:
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(); } } |
Сообщ.
#7
,
|
|
|
Цитата nataly_ @ Нет, все равно не работает Что не работает? 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"); } } |
Сообщ.
#8
,
|
|
|
спасибо
|