一手遮天 AndroID - 锁和并发处理: Lock 演示 reentrantlock 的使用示例如下:项目地址 https://github.com/webabcd/AndroidDemo
作者 webabcd
/concurrent/reentrantlockDemo1.java
/** * reentrantlock 实现了 Lock 接口,关于 Lock 的相关知识点请参见“concurrent.LockDemo1”, “concurrent.LockDemo2”, “concurrent.LockDemo3” * 顾名思义,reentrantlock 是可重入锁,也就是说 reentrantlock 可以递归调用,即支持嵌套 * * reentrantlock * new reentrantlock(boolean fair) - 实例化 reentrantlock 并指定其是否为公平锁,默认是非公平锁 * 公平锁 - 按照请求锁的顺序来获取锁 * 非公平锁 - 是否能获取到锁与请求锁的顺序无关 * isFair() - 是否是公平锁 * isLocked() - 是否持有锁 * hasQueuedThreads() - 锁等待队列中是否有线程在等待锁 * hasQueuedThread(Thread thread) - 指定的线程是否存在于锁等待队列中 * getQueueLength() - 锁等待队列中的等待线程数 * isHeldByCurrentThread() - 当前线程是否持有此锁 * getHoldCount() - 当前线程持有此锁的数量(是数量,而不是次数。比如嵌套锁时,当前线程持有此锁的数量就可能会大于 1) * // 举个例子如下: * try { * _reentrantlock.lock(); * _reentrantlock.getHoldCount(); // 当前线程持有此锁的数量为 1 * try { * _reentrantlock.lock(); * _reentrantlock.getHoldCount(); // 当前线程持有此锁的数量为 2 * } finally { * _reentrantlock.unlock(); * } * } finally { * _reentrantlock.unlock(); * } * hasWaiters(Condition condition) - 是否有线程在等待指定的 condition * getWaitQueueLength(Condition condition) - 返回等待指定的 condition 的线程数 */package com.webabcd.androIDdemo.concurrent;import androID.os.SystemClock;import androIDx.appcompat.app.AppCompatActivity;import androID.os.Bundle;import androID.Widget.TextVIEw;import com.webabcd.androIDdemo.R;import java.util.concurrent.locks.reentrantlock;public class reentrantlockDemo1 extends AppCompatActivity { private TextVIEw _textVIEw1; private reentrantlock _reentrantlock = new reentrantlock(false); @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_concurrent_lockdemo1); _textVIEw1 = (TextVIEw) findVIEwByID(R.ID.textVIEw1); sample(); } private voID sample() { for (int i = 0; i < 5; i++) { Thread thread = new MyThread("thread" + i); thread.setDaemon(true); thread.start(); } } private class MyThread extends Thread { public MyThread(String name){ super(name); } @OverrIDe public voID run() { for (int i = 0; i < 5; i++) { SystemClock.sleep(10); _reentrantlock.lock(); try { SystemClock.sleep(10); writeMessage(String.format("%b, %b, %b, %d, %b, %d", _reentrantlock.isFair(), _reentrantlock.isLocked(), _reentrantlock.hasQueuedThreads(), _reentrantlock.getQueueLength(), _reentrantlock.isHeldByCurrentThread(), _reentrantlock.getHoldCount())); } catch (Exception ex) { } finally { _reentrantlock.unlock(); } } } } private voID writeMessage(final String message) { final String threadname = Thread.currentThread().getname(); runOnUiThread(new Runnable() { @OverrIDe public voID run() { _textVIEw1.append(String.format("%s(%s)\n", message, threadname)); } }); }}
/layout/activity_concurrent_lockdemo1.xml
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:orIEntation="vertical"> <TextVIEw androID:ID="@+ID/textVIEw1" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" /></linearLayout>
总结项目地址 https://github.com/webabcd/AndroidDemo
作者 webabcd
以上是内存溢出为你收集整理的一手遮天 Android - 锁和并发处理: Lock 演示 ReentrantLock 的使用全部内容,希望文章能够帮你解决一手遮天 Android - 锁和并发处理: Lock 演示 ReentrantLock 的使用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)