跳到主要內容

Java Semaphore 用途

老實說,這是第一次接觸到 Semaphore
之前也從來沒使用過,但當使用到他的時候才發現
在多執行緒時的控制,如果想要在某個情況下一次只執行一個執行緒(其實就是想做Lock動作)
Semaphore 可以省下許多事情啊!以下列出簡單的範例code

protected Semaphore isLock = new Semaphore(1); // 限制同時只有1個在執行
...
new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            for (int i = 0 ; i < 5 ; i++) {
                isLock.acquire(); // 會先印出open run1接著要等isLock.release(),才會再繼續印出 open run2
                Log.e("Test", "open run" + i);
            }
        } catch (Exception ex) {
            isLock.release();
        }
    }
}).start();
...
Button release = (Button)findViewById(R.id.release);
release.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        isLock.release(); // 按下按鈕後才會繼續執行
    }
});

參考資料:Semaphore

留言

這個網誌中的熱門文章

What is phpize

What is phpize According to the PHP official document : The phpize command is used to prepare the build environment for a PHP extension. If you need to build such an extension that from github or another code repositories, you can use  build tools to perform the build manually.