synchronized 块

来源:互联网 发布:c语言 string[] 编辑:程序博客网 时间:2024/04/28 18:45
方法一.
private class Worker implements Runnable {    private Object mLock = new Object();    private int spantime = 100;    private boolean bResult = false;    public Worker(int spantime) {        Log.v(TAG, " TestThread constructor");        this.spantime = spantime;        new Thread(this).start();    }    @Override    public void run() {        Log.v(TAG, " TestThread run");        synchronized (mLock) {            try {                Thread.sleep(spantime);                bResult = true;                Log.v(TAG, "current thread = " + Thread.currentThread().getName() +  " worker thread .... count = " + count++);            } catch (InterruptedException e) {                e.printStackTrace();            }            mLock.notifyAll();        }    }    boolean getResult() {        synchronized (mLock) {            try {                mLock.wait();            } catch (InterruptedException e) {                e.printStackTrace();            }        }        return bResult;    }}


 方法二

 public void onClick(View v) {         AThread thr = new AThread();         thr.start();         synchronized(thr){                 try {                         //Thread.sleep(1000);                         thr.wait();                         Log.v(TAG, " sleep 1000 --> 2");                 } catch (InterruptedException e) {                         // TODO Auto-generated catch block                         e.printStackTrace();                 }         }         synchronized(thr){                 thr.mReady = true;                 Log.v(TAG, " set mReady = true ---> 3");                 thr.notifyAll();         } } class AThread extends Thread{         public boolean mReady = false;         public AThread(){                 super("Athread");         }         public void run(){                 Looper.prepare();                 synchronized (this){                         try {                                 Thread.sleep(1000);                                 Log.v(TAG, " Thread notifyall -->1");                                 this.notifyAll();                         } catch (InterruptedException e) {                                 // TODO Auto-generated catch block                                 e.printStackTrace();                         }                 }                 synchronized(this){                         while (!mReady){                                 try {                                         wait();                                         Log.v(TAG, " Thread wait ----> 4");                                 } catch (InterruptedException e) {                                         // TODO Auto-generated catch block                                         e.printStackTrace();                                 }                         }                 }                 Looper.loop();         } }


 

原创粉丝点击