Spát vlákno, dokud událost se účastní v jiném vlákně

hlasů
25

Mám dva závity v aplikaci pro Android, jeden je pohled nit, a druhá je pracovník vlákno. To, co chci udělat, je, spát pracovní podproces dokud pohled vlákno ukončí manipulaci metody OnDraw.

Jak mohu udělat? Je nějaká čekat na signál, nebo tak něco?

Položena 23/09/2008 v 16:32
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
34

Sdílet java.lang.Object mezi oběma závity, jejichž jediným účelem je oznámit pracovní vlákno, když to může pokračovat ve své práci. Kdykoliv pracovník nit dosáhne bodu, kdy by měl spát, to dělá toto:

stick.wait();

Když pohled vlákno dokončí svou práci OnDraw, volá toto:

stick.notify();

Všimněte si, požadavek, aby pohled na vlákno vlastnící monitor v objektu. Ve vašem případě by to mělo být poměrně jednoduché prosadit s malým sync bloku:

void onDraw() {
  ...
  synchronized (stick) {
    stick.notify();
  }
} // end onDraw()

Konzultovat javadoc pro java.lang.Object o těchto metodách (a notifyAll, jen v případě); Jsou velmi dobře napsané.

Odpovězeno 23/09/2008 v 16:45
zdroj uživatelem

hlasů
2

Chcete-li, souběžnost API vyšší úrovně (s věcmi, jako bariér), můžete zkusit portovat na java 5 souběžnosti API, který pracuje na Javě 1.3 a výše, a mohou pracovat na systému Android. Likes Object.wait / oznámit bude fungovat, ale může být trochu strohý.

Portovat-util-souběžné

Odpovězeno 23/09/2008 v 17:54
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more